以往的几个系统都是使用一种比较随意的日志输出方式,就是有什么问题就输出,超时日志,错误日志,ASSERT,异常等全部在一个文件中,这样不方便查看,也不方便于对于紧急事件的反应;也无法控制输出级别,有些输出可能只在DEBUG版本或者第一个RELEASE版本才需要,当版本稳定后,就不需要这些日志了,日志级别应该全部是可以控制的。分两部分来谈这个问题:
1.可控级别:可控级别分在两个部位控制,第一个是编译级别,在编译级别中通过预编译参数或者宏来实现最高可输出级别,别一种是动态控制,使用参数来控制级别,只在小于参数值的级别才可以输出。编译级别的参数值优先级应该大于动态级别的,这样就可以方便显示控制日志输出量。

2.格式化输出:以往的日志很随意,无法格式化输出,关于格式化输出,以前我有过一次尝试,在新的系统中使用格式化输出,如“贵重物品流向”日志,这种日志使用空格分割字段,这样可以使用工具方便的读取日志,进行过滤,查询操作,速度也比较快。缺点是日志格式单一,且非常严格,只能适用于有共性的系统。还有一种格式化方式是使用XML格式,这样不同类型的日志可以用不同的标志来区别,各自也可以有自己的属性,对于工具来说,也可以方便的查阅,最大的问题就是文件大小,会成倍增加日志输出的字节数量。最后一种方式是通过分成不同的文件来存放,这样会生成多种文件,而且不好使用工具来查阅。

我个人比较偏向于使用XML,虽然日志过大,但是管理方便,使用工具很容易查询。但是有很多底层日志不是使用的这种方式,我要评估一下这样的改支有多大。
另一个现在无法解决的问题就是”重复日志”,如果有一个错误,而且这个错误会在每次心跳时记录,那么这个日志就会很多,很浪费空间,日志常常几百M,现在还没有找到办法解决。