2013-08-23 69 views
1

我log4j配置是如下log4j配置電平誤差

log4j.rootLogger=INFO, CA, FA, DA 

#Console Appender 
log4j.appender.CA=org.apache.log4j.ConsoleAppender 
log4j.appender.CA.layout=org.apache.log4j.PatternLayout 
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

#File Appender 
log4j.appender.FA=org.apache.log4j.FileAppender 
log4j.appender.FA.File=/home/admin/logs/sysout.log 
log4j.appender.FA.layout=org.apache.log4j.PatternLayout 
log4j.appender.FA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 
log4j.appender.FA.Threshold = WARN 



#File Appender 2 
log4j.appender.DA=org.apache.log4j.FileAppender 
log4j.appender.DA.File=/home/admin/logs/debug.log 
log4j.appender.DA.layout=org.apache.log4j.PatternLayout 
log4j.appender.DA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 
log4j.appender.DA.Threshold = TRACE 

我understading是

  1. INFO將被記錄到控制檯
  2. WARN將被記錄到sysout.log
  3. TRACE將記錄到debug.log

但WARN正在記錄到debug.log和sysout.log。另外,TRACE不記錄任何文件。

控制檯同時具有TRACE和WARN。

能否請你告訴我,我究竟做錯了

回答

1

你需要在你的心中分開記錄器和附加器的概念。

對於三個appender,請記住閾值是appender將處理的消息級別最低級別。 appender將處理其閾值級別或任何更高級別的消息。

CA沒有設置閾值,因此它將記錄發送給它的所有消息,而不管其級別如何。同樣,DA具有TRACE的閾值,因此它也會記錄發送給它的所有內容(因爲TRACE是最低級別)。 FA具有WARN閾值,因此它將過濾掉WARN級別以下的任何消息 - 它將僅包含WARN,ERROR和FATAL消息。

該段的重要部分是「發送給它的所有消息「。既然你已經配置了一個INFO級別的根日誌記錄器,並且沒有將任何特定的日誌記錄器配置到較低級別,只有INFO及以上版本的消息纔會被髮送到appender - DEBUG和TRACE消息將被靜默地刪除。這就是爲什麼您在任何記錄器中都看不到TRACE輸出的原因。