2013-04-17 107 views
0

我有一個要求,整理屬於幾個類別的所有log4j日誌,並在每天結束時發送郵件。由於我使用org.apache.log4j.DailyRollingFileAppender將所有類別記錄到相同(過時)的文件中,所以我無法找出一種方法來在不通讀日誌文件的情況下過濾生成的日誌。如果有人能夠建議我使用java來做到這一點,那將會很棒。以下代碼是我需要過濾的一些日誌類別的示例。有沒有辦法過濾特定類別的log4j日誌

log.fatal("Fatal error message"); 
log.error("Error message"); 

如果最後過濾是不可能的,如果我至少可以找到覆蓋這些類別的函數的方法,那應該就足夠了。我的log4j.properties看起來像這樣。

log =/usr/end_of_day_logs 
log4j.rootLogger = DEBUG, FILE 

log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.FILE.File=${log}/log.out 
log4j.appender.FILE.Append=true 
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm} [%C %x~ %M:%L] %-5p - %m%n 
+0

請不要錯過選擇使用log4j 2 - beta,但已經非常穩定。它給了你更多的過濾選項比log4j 1系列 – Christian

回答

0

一種選擇是爲單獨的類別創建單獨的文件,然後實現發送郵件的Appender。您可以查看DailyRollingFileAppender的功能,並可能將其擴展爲通過郵件發送文件。

0

您可以爲每個日誌級別[甚至不同的日誌包]創建多個appender。

log =/usr/end_of_day_logs 
log4j.rootLogger = FATAL, FFILE 

log4j.appender.FFILE=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.FFILE.File=${log}/flog.out 
log4j.appender.FFILE.Append=true 
log4j.appender.FFILE.DatePattern='.'yyyy-MM-dd 
log4j.appender.FFILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FFILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm} [%C %x~ %M:%L] %-5p - %m%n 

log =/usr/end_of_day_logs 
log4j.rootLogger = ERROR, EFILE 

log4j.appender.EFILE=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.EFILE.File=${log}/elog.out 
log4j.appender.EFILE.Append=true 
log4j.appender.EFILE.DatePattern='.'yyyy-MM-dd 
log4j.appender.EFILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.EFILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm} [%C %x~ %M:%L] %-5p - %m%n 

然後使用與SMTP appener與需要的圖案的另一附加器。

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender 
log4j.appender.MAIL.BufferSize=1 
log4j.appender.MAIL.SMTPHost=smtp.example.com 
[email protected] 
[email protected] 
log4j.appender.MAIL.Subject=Exception in Application 
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout 
log4j.appender.MAIL.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5r %-5p [%t] %c{2} - %m%n 
+0

謝謝,但這仍然只強制執行一類日誌發送出去。每次有該類別的日誌也是如此。我想要一種方式來發送一組類別,它們的日誌已整理並一次全部發送。我現在已經手動實現了這個。將不勝感激。 –

相關問題