游戏服务器日志杂谈

来源:互联网 发布:叶子流量卡淘宝店地址 编辑:程序博客网 时间:2024/06/05 02:50

简介

我们游戏服务器是使用异步请求的方式来执行玩家的每一项操作,现在的日志系统主要记录了服务器接受到的网络消息已经发出的网络消息,最近在修正bug时发现了现在log策略的一些缺陷,导致定位问题困难。

返回值

玩家的每个请求都有失败的可能,那么由于什么原因失败,该请求最终执行的结果是怎样,一定要在该请求的response中体现出来。

我们游戏中有一个eErrorInfoGeneral, 之前有同事开发的时候不管什么错误都喜欢返回这个通用错误,他的理由是反正出了错误都有打断点调试,没必要返回具体错误。那时我该在做前端,所有没有反驳他。现在经过将近一年的后端开发,深刻感受到返回具体错误是十分重要的。

其优点有二:

  1. 方便测试和前后端联调。测试的时候可以很方便的测试特定情况下返回特定的错误信息,从而保证错误分支的正确性。前后端联调时,当前端出现问题时,也可以根据错误信息一眼看出问题所在,从而避免浪费调试时间。
  2. 方便线上调试。 当游戏线上某个玩家请求出现异常的时候,是不方便将游戏打断点进行调试的,此时具体的错误信息对缩小问题范围,定位问题特别有帮助。

在线查看日志

现在一般的日志框架都会对日志按重要性进行分级,我们游戏在内网测试时会输出所有等级的日志,但是在线上时只会输出error等重要的日志信息。另外由于我们项目比较老,使用的是C++开发,不支持热更新,也不支持在线改变日志输出等级,只有重启服务器才能改变,这导致我们服务器的日志系统有点鸡肋,只有内网才能使用。

我觉得日志是在线查找问题时的重要工具,所以一定要可以在线上使用,而不是内网使用,所以之前通过外部api添加了不停服改变日志输出等级的功能。

日志输出信息

我们游戏只输出服务器接受和发出的网络信息,在实际使用中明显感觉到这是明显不够详细的。因为有些玩家请求最终会发起多个服务器内部请求,而这些内部请求的结果不能很好的被检测到。所以需要修改为输出每个服务器异步请求及其response。

为了对应每个请求和response,需要输出执行该请求的Ghost信息,以及该请求的序列号信息。同理,发出和接受到的网络信息也应该输出具体的目标方和发送方的信息。这些都是我们游戏中做的不足的地方。

日志分析工具

线上日志比内网日志更复杂,因为夹杂着众多玩家众多操作的信息,通过跳板机去线上手写grep或者python文件来查询某个玩家的某个操作及其衍生的异步请求的信息是低效且痛苦的,所以应该事先准备好相关的脚步攻击,方便从信息中提取有效的信息。

总结

  • 以异步请求-回应为单位输出日志
  • 输出详细的请求-回应信息,方便查询
  • 写代码时,返回特定的错误而不是通用错误,方便定位问题
  • 准备好处理日志的脚本工具,方便快捷