14 ACE的日志的不如意
ACE的日志部分是一个非常漂亮的实现,在多线程和多进程模型下都能较好的效率和安全使用。但是却又少量的不足,让人意犹未尽。
14.1 无法替换的时间戳格式
ACE日志对于时间戳的格式是固定的,采用的是格式,这个格式在西方人看起来估计还比较顺眼,在东方人眼中却不如人意。更好的方式当然是时间戳的函数可以重载。或者用函数对象(指针)作为参数传入。
虽然这部分代码可以重载解决这个问题,但是要大动干戈只修正这个问题感觉却又不值得的。
14.2 日志策略的初始化方式别扭
ACE提供了一个日志策略类ACE_Logging_Strategy辅助大家定义日志策略。但是他的初始化参数却是命令行参数,而不是变量参数。
int
ACE_Logging_Strategy::init (int argc, ACE_TCHAR *argv[])
你必须使用这样的命令行去初始化日志策略模块。
-m1024 -N10 -fSTDERR|OSTREAM -s../log/c4ad.log
试问有几个服务器的开发人员会将这些日志策略的初始化放到命令行参数上去。
14.3 没有按天(时间)分割日志文件的方式
ACE_Logging_Strategy的日志文件的分割策略采用的是按照文件大小分割文件,文件的序号采用滚动的,但这种日志分割方式无法根据文件时间了解日志内容,(由于文件序号要滚动,序号文件的最后修改时间都一样),你只能grep所有的日志寻找你要的内容。
而在我看来,最好日志分割方式肯定是按照日期进行分割日志文件。每天创建一个新的日志文件,可以方便分割日志。清理和管理的工作量大大降低。
14.4 日志槽的方式
ACE_Logging_Strategy采用的是日志槽的方式Enable或者Disable某些级别的日志。但是感觉多少有点不自然的,ACE自己的日志级别本身就是分级的。个人感觉应该是如果日志输出的日志级别大于定义的级别就能输出应该是一个更好的选择。
解决ACE_Logging_Strategy的问题最好的办法还是扩展这个类。实现自己的日志策略类。