Posted on 2008-10-10 04:18
Fox 阅读(1825)
评论(8) 编辑 收藏 引用
作者:Fox
本文同时发布在http://www.yulefox.com和http://www.cppblog.com/fox。
两个多月之前,在CPPBLOG上写过一篇关于游戏开发中日志该怎么记录的问题,主要该考虑的问题都已经说明,当时没有实现这一块。在最近一个模块中,写了一个非常简单的写日志的接口,接口的声明大概是:
void PutoutLog(const char *szFile, const char *szLog, ...);
记录的日志格式如下:
1 2008-10-10-03:30:10.618 | projectpath/srcfile.cpp/function(30) : 哦嚯, 这儿出错了(eno : 0x00100000).
用到了__FILE__、__LINE__、__FUNCTION__几个宏。
基本满足需要了,需要改进的地方我现在能想到的主要是:
- 文件名是全路径,没有必要,只记录文件名称其实就够了;
- 没有考虑写日志时的线程同步问题;
- 系统dump时的日志还是没有办法记录;
- 缺少足够的、动态的上下文信息:调用堆栈、函数参数、系统运行参数;
- 日志记录到普通文本中,虽然记录了时间、位置,还是不便于系统查看、查找、分析、挖掘。
说白了,这所谓的基本满足需要只是皮毛,因为最近在打理我的个人博客站点,有感于网页数据库技术的博大精深、美妙直观,如果可以把日志用网页数据库作为读写的载体,岂不甚妙?
隐约中感觉这种想法似曾相识,不识字只好乱翻书,果然在Game Programming Gems 4中发现有这样一篇文章:一个基于HTML的日志和调试系统。有兴趣的同学自己翻书吧:)。
如果将更加丰富的信息写入xml或php文件中,加入到数据库,可以对数据进行分析、挖掘,并友好的显示在浏览器中,这对于枯燥的debug过程,起码增添了些许益处。
然而,这又只是一个想法,或许在我手头上的工作稍后告一段落的时候,我可以花精力研究一下这方面的东西。