2011-10-10 68 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

相關問題