美文网首页
python 分析游戏日志

python 分析游戏日志

作者: heitufei | 来源:发表于2018-10-10 23:25 被阅读32次

    日志

    国庆前上线了签到送奖励类新功能,收假后收到反馈有几个玩家为实际签到了却没有收到奖励,遂对游戏记录进行分析。使用的是 python ,大致记录下。

    由日至文件分析筛选出两种类型的日志

    其一是 签到记录,玩家实际签到的信息,需要的信息有,日期,玩家id,文件 depositcheckin.log

    [2018-09-30 23:52:55.82 INF *agent*] @server/agent/camps/deposit.lua:140::[pid:1001dbd,uid:Aaa294159] deposit checkin {open_ts=1538321892,last=1538322775,lose={},with_today=true,status=1,days=1,has_mail=true}
    [2018-09-30 23:52:59.17 INF *agent*] @server/agent/camps/deposit.lua:140::[pid:1001dc5,uid:Aaa294624] deposit checkin {open_ts=1538321950,last=1538322779,lose={},with_today=true,status=1,days=1,has_mail=true}
    

    其二是查询记录,包括玩家漏签的信息,需要的信息有,玩家id,漏签日期 lose 后的数组既是,文件 depositlose.log

    [2018-10-03 01:07:45.95 INF *agent*] @server/agent/main.lua:336::[pid:1004d8c,uid:Naa126591] client response: query_deposit, ret:{open_ts=1538293842,lose={"2018-10-02"},with_today=false,status=1,days=364}
    [2018-10-03 01:08:23.31 INF *agent*] @server/agent/main.lua:336::[pid:1004d8c,uid:Naa126591] client response: query_deposit, ret:{open_ts=1538293842,lose={"2018-10-02"},with_today=false,status=1,days=364}
    

    分析代码

    1. 打开文件读取每行日志
    2. 正则表达式匹配出需要的信息
    3. 统计每个玩家漏签,签到,并对比得到出错的漏签日期
    4. 代码还是很暴力哈
    import re
    
    lose,checkin = {},{}
    def scan_lose():
        f = open("./depositlose.log","r")
        for l in f.readlines():
            m = re.match(".*uid:([A-Z]+[a-z]+[0-9]+)]",l)
            if not m :continue
            uid = m.group(1)
            if uid not in lose:
                lose[uid] = []
            m = re.match(".*lose={(.*)}.*}",l)
            if not m :continue
            ret = m.group(1)
            for date in ret.split(","):
                if not date or date=='""':continue
                if date[1:-1] not in lose[uid]:
                    lose[uid].append(date[1:-1])
        f.close()
    
    def scan_checkin():
        f = open("./depositcheckin.log","r")
        for l in f.readlines():
            m = re.match(".*uid:([A-Z]+[a-z]+[0-9]+)]",l)
            if not m :continue
            uid = m.group(1)
            if uid not in checkin:
                checkin[uid] = []
            date = l[1:11]
            if date not in checkin[uid]:
                checkin[uid].append(date)
        f.close()
    
    def analyse():
        for uid,it in lose.items():
            if not it : continue
            fake = []
            ck = checkin.get(uid,[])
            for date in it:
                if date in ck and date not in fake:
                    fake.append(date)
            if not fake:continue
            print(uid,fake,len(fake))
    
    def main():
        scan_lose()
        scan_checkin()
        analyse()
    
    main()
    

    后续

    虽然有反馈的玩家仅有几个,统计出来有 70 多个出错的玩家,罪过罪过!! 各个玩家漏掉的天数 1 2 3 4 天不等,旧有的补发奖励的借口,只能单次给一个人发送,遂改为可发送多人,以便使用。

    相关文章

      网友评论

          本文标题:python 分析游戏日志

          本文链接:https://www.haomeiwen.com/subject/zfxvaftx.html