log4cplus TimeBasedRollingFileAppender

 

参考自:http://blog.csdn.net/u010607621/article/details/54944696

对于TimeBasedRollingFileAppender 这个日志appender 的功能总结

使用配置文件
示例(部分):
  log4cplus.logger.loggerMkt=ALL, RRM

  log4cplus.appender.RRM.File = file.log
  log4cplus.appender.RRM.FilenamePattern = log/%{yyyy-MM-dd_HHmm}/SQFront.mkt.log
  log4cplus.appender.RRM.CreateDires = true
  log4cplus.appender.RRM.MaxHistory = 9999
  log4cplus.appender.RRM.CleanHistoryOnStart = false

若使用TimeBasedRollingFileAppender 作为appender 的实例则必须要配置FilenamePattern 的值,不能为空。程序对该值有判断,若为空则直接报错。
FilenamePattern 配置的作用:
  1、指定转存日志文件的时间周期:
    %d{yyyy-MM-dd} 指定转存周期为一天
    %d{yyyy-MM} 指定转存周期为一月
    %d{yyyy-MM-dd_HHmm} 指定转存周期为一分钟
  2、指定转存日志文件的文件名,在上面的示例中则为SQFront.mkt.log
    不过这里要提醒一下,因为配置中指定了目录,这些目录如果不存在则必须要指定CreateDirs 为true, 否则将无法创建日志文件。
  3、另外,如果转存文件前,存在该文件,则原来的文件将会被替换。程序没有将原来存在的文件进行备份,这是一个不小的雷,你可以对源代码简单修改优化一下。
File 配置的作用:
  仅仅是在程序运行过程中临时存储最新的日志内容,同时是以追加的方式打开该日志文件进行新日志的打印,当转存时间到来则会将该日志文件中的日志转存到指定文件中。
  若该值未配置,则直接使用FilenamePattern 的值。
MaxHistory 配置的作用:
  该值是保留历史文件的最大数量,一般情况下,我们是要保留所有的日志文件的,所以尽可能大就好。
CleanHistoryOnstart 配置的作用:
  该值是指定在程序启动时是否要对历史日志进行清理删除,一般我们都会保留日志,所以设置为false。或者直接不设置该也是一样的。

最后还有一个问题就是,当程序正常结束时会调用shutdown() 对资源进行清理及回收,但是在这个过程中最新的日志文件会被截断,从而导致了最新的一个日志文件中的内容全部丢失,这显示违反了我们的初衷。所以这个算是一个不小的BUG(个人觉得),不过这个地方也不麻烦,只要修改一个地方就可以了。
如下: fileappender.cxx 文件,将函数中的rollover() 的调用注释掉就可以了。

1 void TimeBasedRollingFileAppender::close()
2 {
3     // rollover();
4     FileAppenderBase::close();
5 }

 

posted on 2017-05-03 17:06  独孤酷酷  阅读(1671)  评论(0编辑  收藏  举报