在游戏开发的过程中,我们需要记录⼀些⽇志,以便以后了解游戏运⾏的情况,以及根据⽇志发现并处理游戏中的突发情况。 ⼀,游戏⽇志可以分为以下⼏种:
1)系统⽇志
2)⽤户操作⽇志
3)异常⽇志,即错误⽇志
系统⽇志
系统⽇志⼀般描述的是服务器⽇常运⾏的状态。⽐如启动是否成功,每天统计⼀下内存的占⽤量,CPU的使⽤量等信息。⽤于查检服务器运⾏的健康状况。这对于技术分析来说是⾮常重要的。如果没有这些信息,⼀但服务器宕机,我们就两眼⼀抺⿊,不知从何下⼿了。这部分⽇志⼀般产⽣的⽂件不⼤,内容不是太多,可以记录成⽂本形式,以备查看。如果需要存储到数据库中,或使⽤⼯具查看,则需要定义好⽇志的格式,以⽅便解析。 ⽤户⽇志
游戏服务器的核⼼就是⽤户的⽇志。⽤户⽇志可以分为⼏⼤类:登陆⽇志;消费⽇志,收⼊⽇志,⾏为⽇志,充值⽇志。
1,登陆⽇志
主要记录玩家登陆的时间,IP等信息。登陆⽇志可以⽤于判断客户端的状态。识别使⽤软件进⾏不正常的⼤规模访问。⽐如,频繁的登陆断开。这会给服务器造成额外的压⼒。使正常的玩家受到影响,有时候严重的,不能正常登陆。管理员可以根据这些信息,对此客户端的IP进⾏封号处理。 2,消费⽇志
主要记录玩家在游戏中各种货币的消费情况。根据这些信息,可以分析玩家⼤部分资⾦的流向,对运营的营销有很⼤的帮助。还可以根据这些信息,查看服务器系统中是否存在⼀些刷钱的BUG。因为⼀个⼈⽆限的可以购买⼀个物品明显是不正常的。根据这些⽇志,可以很快定位到哪个功能导致了这种情况的发⽣。
3,收⼊⽇志
主要记录玩家在游戏中的货币来源情况。也是游戏系统整个产出的表现。便于数值对整个游戏的产出情况做⼀个全⾯的了解。也有助于发现系统的BUG,因为⼀个⼈的资⾦突然⽐别的玩家⾼出了很多是不正常的。根据这些⽇志,可以定位到是哪个功能导致了这种异常的增长。4⾏为⽇志
主要记录玩家的⼀些操作⾏为,⽐如抽卡次数,挑战次数,购买次数等信息。分析玩家在游戏成长过程中的⾏为。根据这些⽇志,可以修改游戏的某些⼩功能,增加⽤户体验的好感。
edcnhs母鸡接鸡蛋5充值⽇志
主要记录玩家的充值信息。这是⾮常重要的,如果⼀个玩家充值,钱扣了,但是钻⽯没发给⼈家,是要给⼈家⼀个说法的。充值⽇志可以直接反映出哪些玩家是⼟豪,清楚游戏收⼊的来源。
石墨电极加工异常⽇志
主要记录在游戏服务器中程序发⽣的异常。有些BUG在测试环境中是很难测试到的。记录程序中的异常,可以定位程序中BUG的位置,清楚BUG产⽣的原因。对游戏服务器的改进提供必要的⽀持。
⼆
游戏⽇志存储的⽅式
因为⽇志的存储是⼀种IO密集的操作,如果在游戏逻辑中处理不当,会造成游戏逻辑处理缓慢,给玩家的体验带来不好的影响。⽇前常⽤的⽇志存储⼯具是log4j,主要是把⽇志存储到⽂本⽂件中,关于log4j的使⽤,我们在另外⼀篇⽂章中再详述。今天我们聊聊把⽇志⼊库的操作。在⽇志⼊库之前,⼀定要定义好⽇志的格式,⽅便解析⼊库。⽐如登陆⽇志,需要记录的信息由:⽤户id,IP,登陆时间等,可以把这些字段写在⼀个对象⾥⾯,然后⽤转化为JSON字符串。
⼀般来说,⽇志与游戏的实时性关联不⼤。我们可以把⽇志的⼊库操作做⼀个单独的进程开发。让它运⾏在另外⼀台与游戏逻辑服务器分开的物理机器上。这样可以减少对游戏逻辑服务器资源的占⽤,减轻逻辑服务器的压⼒。实现的⽅式也很简单。在游戏逻辑服务器初始化⼀个队列:
</pre><pre name="code" class="java">import urrent.BlockingQueue;有起子
import urrent.LinkedBlockingQueue;
接地线夹
public class LogManager {
// ⽇志缓存队列
private final static BlockingQueue<String> LOG_QUEUE = new LinkedBlockingQueue<String>();
public static void put(String log) {
try {
LOG_QUEUE.put(log);
} catch (InterruptedException e) {
植物水
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String get() {
try {
return LOG_QUEUE.take();
} catch (InterruptedException e) {
/
/ TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
在服务器启动的时候,启动⼀个线程,从这个⽇志缓存队列中取出⽇志,以Socket的⽅式发送到⽇志服务器。⽇志服务器接收传送过来的⽇志。因为⽇志服务器要把⽇志写⼊到数据库中,为了访⽌⼤规模的写⼊,导致数据库连接资源消耗完,在⽇志服务器也建⽴⼀个缓存队列,把⽇志先放到缓存队列中。另外再开启若⼲个线程连接数据库,并从缓存队列中取出⽇志数据,写⼊到⽇志数据库中。在⽇志数据库中,⽇志的表按天存储,也就是⼀天⼀个表,由程序⾃动完成。由于⽇志的数据量⾮常庞⼤,可以把数据库中过时⽐较长的数据备份并删除,也可以做⼤数据化处理