数据记录方式有2种:
1、 记录在MYSQL数据库服务器,并且开放权限以供数据中心采集(推荐该方式)。
2、 记录为文本形式,保存在游戏服务器,并且提供http接口以供读取。
数据记录在数据库中,具有以下优点:
1、 查询和数据采集较为实时,便于开发客服操作日志接口。
2、 不需要额外开发数据接口。
3、 便于游戏内部利用这些记录做一些活动排名等。
缺点:
1、 单表过大的时候需要考虑分表,并且定期清理旧数据。
2、 查询过大数据量时,可能影响服务器速度。
数据记录表要求具有自增id字段或者精确到秒的时间字段,并且都在同一个数据库中。
文本记录方式需要提供http接口, http接口需要支持range属性(需要知道文件长度),因此http接口的实现方式为直接读取文件输出。
游戏日志分2种,第一种是增量数据,如操作日志、登录日志,第二种是状态数据,如用户表、配置表。
第一种:按小时产生和记录,每个小时至少产生一个日志文件,日志文件名必须包含日志文件产生的类型、日期、时间,格式为: xxxxx_YYYYMMDDHH.log ,其中xxxxx用于标识日志类型。YYYYMMDD表示文件产生日期,HH表示文件产生的小时,00为固定值,例如:loginlog_2013031009.log,表示2013年3月10日9点产生的登录日志文件。如gamelog_2013031009.log,表示2013年3月10日9点产生的操作日志文件。
第二种:按天产生和记录,生成时间在每天的0点到1点。日志文件名由日志类型和日志时间构成(日志时间和数据时间一致),格式为: xxxxx_YYYYMMDD.log,其他同上。
1、所有日志均使用‘|’分隔字段形式,各个字段内容中不允许出现‘|’字符。
日志文件必须以文本(txt)日志方式记录,不要使用二进制方式。每条日志之间以换行符分隔,日志内容字段之间以竖线“|”进行分隔,只支持使用一级分隔符。角色名、地图名、NPC名等可能含有字符的字段必须不能含有竖线“|”这个特殊字符,否则会导致日志解释入库异常。日志中第一个字段为非日志内容的字段,用于标识是什么类型的日志。
2、日志按照表设计中规定的字段顺序记录,不记录表的自增ID,可以将原ID列记录为当前时间字符串,格式为:yyyy-MM-dd HH:mm:ss
1、流程:
数据中心服务器通过get或者post方式请求游戏的http接口,接口程序读取指定的文本文件,并且输出其中的内容。
2、参数字段:
字段 |
描述 |
备注 |
table |
指定表名 |
如 loginlog |
filedate |
请求读取的表时间后缀 |
如2013_03_10_09 (2013年3月10日9点) |
time |
请求时系统时间 |
Unix时间,1970年起以秒为单位 |
sign |
验证签名 |
md5(“time=” + time + “&key=” + key) |
3、数据加密:
每条协议指令中必须包含time及sign参数以进行合法验证。
签名验证方法:md5(“time=” + time + “&key=” + key) == sign。
Key由双方约定。
4、示例:
http://www.XXX.com/cmd_type/cmd?table=loginlog&filedate=2013_03_10_09&time=1234567890&sign=abcdef123456
其中http://www.XXX.com/为游戏域名。
5、有的日志可能没有数据不会生成文件,在开发http接口的时候需要做异常处理,找不到文件则输出{"state":"0","info":"错误信息"}。对于生成了文件,但没有数据内容的,可以直接输出空白。