log4j-DailRollingFileAppender,重写子附件()

log4j-DailRollingFileAppender,重写子附件(),log4j,Log4j,我是log4j的DailyRollingFileAppender类的新手,我想用它来执行日志文件的每日循环,同时还想在每次有事件触发到日志事件时手动修改日志文件 例如,我希望在日志文件中始终将“TOTAL COUNT:”的值增加1。我该怎么做呢 日志内容的示例: 07 Oct 2011 16:57:51 [INFO ] - Failed 07 Oct 2011 16:57:51 [WARN ] - Failed 07 Oct 2011 16:57:51 [ERROR] - Successful

我是log4j的DailyRollingFileAppender类的新手,我想用它来执行日志文件的每日循环,同时还想在每次有事件触发到日志事件时手动修改日志文件

例如,我希望在日志文件中始终将“TOTAL COUNT:”的值增加1。我该怎么做呢

日志内容的示例:

07 Oct 2011 16:57:51 [INFO ] - Failed
07 Oct 2011 16:57:51 [WARN ] - Failed
07 Oct 2011 16:57:51 [ERROR] - Successful
07 Oct 2011 16:57:51 [FATAL] - Failed
07 Oct 2011 16:57:52 [DEBUG] - Successful
07 Oct 2011 16:57:52 [INFO ] - Failed
07 Oct 2011 16:57:52 [WARN ] - Failed
07 Oct 2011 16:57:52 [ERROR] - Successful
07 Oct 2011 16:57:52 [FATAL] - Failed
07 Oct 2011 16:57:53 [DEBUG] - Successful
07 Oct 2011 16:57:53 [INFO ] - Failed
07 Oct 2011 16:57:53 [WARN ] - Failed
07 Oct 2011 16:57:53 [ERROR] - Successful
07 Oct 2011 16:57:53 [FATAL] - Failed
07 Oct 2011 16:57:54 [DEBUG] – Successful

TOTAL COUNT: 15

dailrollingfileappender
中覆盖
subAppend()
似乎是一条可行之路。在调用
super.subAppend()
时,您还必须小心,因为
WriterAppender
是这样实现的:

受保护的无效子外观(记录事件){
this.qw.write(this.layout.format(事件));
// ...
}
而且你不想用“总计数”行来布局

在我的
subAppend()
中,我会完全复制d.R.F.Appender的功能,添加:

  • 行计数逻辑,如果其他地方不存在
  • 检查是否应打印特殊行的条件,然后格式化并直接打印到
    qw

我不太理解“而且你不想用“总计数”行布局”这句话。“this.qw.write(this.layout.format(event))”是将新日志事件写入文件还是附加到文件末尾?@mike这两个选项之间有什么区别?日志线总是被追加,你不能把任何东西放在中间。“不要布局[…]”我的意思是,如果您正常记录“总计数”,您会得到一行,如您的示例中的“07 Oct 2011 16:57:54[DEBUG]TOTAL COUNT”—这就是为什么您需要绕过格式化程序。如果它总是以附加方式记录,我猜测修改中间行的唯一方法是手动打开日志文件,并在文件中执行搜索并替换字符串。@ Mike是-手动校正,或者我在答案中描述的方式。但是,不要在另一个进程中修改活动文件,只修改log4j完成写入的文件。好的,谢谢!我认为我的情况是,我需要修改仍在记录的日志文件。所以,我想我需要想出一些别的东西来显示总数。也许在日志中引入一个字段来显示行号,比如“No.534 07 Oct 2011 16:57:51[ERROR]-Successful”?