日志该这么记录

作者: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过程,起码增添了些许益处。

然而,这又只是一个想法,或许在我手头上的工作稍后告一段落的时候,我可以花精力研究一下这方面的东西。

你可能感兴趣的:(日志该这么记录)