2011-10-10 139 views
1

我是log4j的DailyRollingFileAppender类的新手,我想用它来执行日志文件的日常轮换,同时也想每次都手动修改日志文件是触发记录事件的事件。log4j - DailyRollingFileAppender,覆盖subAppend()

例如,我希望在日志文件中始终将“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 

回答

0

似乎压倒一切subAppend()DailyRollingFileAppender是要走的路。您还可以打电话super.subAppend()时,作为WriterAppender实现它这样的谨慎:

protected void subAppend(LoggingEvent event) { 
    this.qw.write(this.layout.format(event)); 
    // ... 
} 

,你不希望你的“TOTAL COUNT”线的布局。

在我subAppend()我会复制DRFAppender究竟是干什么的,并补充说:

  • 行计数逻辑,如果其他地方没有出现,
  • 条件检查,如果专线应打印,然后格式化并直接打印到qw
+0

我不完全理解部分说“你不希望布局与你的”总数“行。”。 “this.qw.write(this.layout.format(event))”是否将新的日志事件写入文件或追加到文件末尾? – mike

+0

@mike这两个选项有什么区别?日志行总是附加的,你不能在中间放置任何东西。通过“不要布局[...]”我的意思是,如果您通常登录“TOTAL COUNT”,您会得到一条像“2011年10月7日16:57:54 [调试] TOTAL COUNT”的行,如你的例子 - 这就是为什么你需要绕过格式化程序。 – MaDa

+0

如果它总是以一种附加的方式登录,我猜测在中间修改一行的唯一方法是手动打开日志文件并执行搜索并替换为文件中的字符串? – mike