2009-09-22 26 views
1

我試圖允許每個使用Log4j的一類特殊的調試日誌記錄,並且我有以下幾點:每個類的Log4j,如何確定優先級?

log4j.rootLogger=stdout, daily 

log4j.logger.com.mycompany.myapplication.mymodule=DEBUG 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{h:mm:ssa} %5p (%F:%L) - %m%n 
log4j.appender.stdout.threshold=warn 

log4j.appender.daily=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.daily.layout=org.apache.log4j.PatternLayout 
log4j.appender.daily.layout.ConversionPattern=%d{h:mm:ssa} %5p (%F:%L) - %m%n 
log4j.appender.daily.File=/some/file/path/stuff 
log4j.appender.daily.DatePattern=MMdd'.log' 
log4j.appender.daily.threshold=info 

如果是這樣的WEB-INF /班/ log4j.properties文件作爲tomcat的一部分應該看到mycompany.myapplication.mymodule的調試消息還是在文件後面的條目覆蓋它?(還是我改變每個類的日誌記錄級別完全錯了嗎?)

其次,如果log4j.properties文件包含在一個jar文件,做我在Tomcat中設置將覆蓋那些?

回答

3

你告訴你的班級日誌在水平DEBUG但告訴追加程序下面忽略任何WARN和信息,所以你不會看到的日誌信息。

至於在其中log4j.properties將被發現的順序:

  1. WEB-INF /類
  2. 在WEB-INF /不限JAR LIB
  3. 公共/類(在Tomcat目錄)
  4. ,你投入共同的任何JAR /批准
  5. ,你投入共同的任何JAR/lib目錄
  6. 共享/班
  7. 您放入共享任何JAR/lib目錄

發現將找到的第一個文件停止。

0

是的,你似乎正在配置你的個人記錄器正確。

不,他們不會被看到,因爲你是在宣告你的兩個附加目的地的thresholds在上面的DEBUG:

log4j.appender.stdout.threshold=warn 
log4j.appender.daily.threshold=info 

至於「其次,如果一個log4j.properties文件包含在一個jar文件,我在Tomcat中的設置是否會覆蓋那些?「,我不確定這是什麼意思。 log4j嘗試從類路徑加載log4j.xml或log4j.properties,並將使用它首先發現的任何一個。 IIRC,Tomcat的共享lib文件夾中的條目取代每個應用程序的類路徑。如果您在WEB-INF/lib的jar文件和WEB-INF/classes的純文本文件中都有log4j配置,那麼您在運行時基本上會拋出一個硬幣來使用哪個硬幣。

1

對於你的第一個問題,我會說log4j.appender.daily.threshold=info是一個問題。我可能不會選擇任何DEBUG消息。

通常,我們不給appender設置閾值,爲logger配置關卡。


我建議你使用log4j.xml而不是log4j.properties。 除了有用的驗證外,它還增加了一些有趣的功能或默認值。 我不記得到底是哪,但...

0
  1. 我認爲你必須給MyModule的一個appender,如

    log4j.logger.com.mycompany.myapplication.mymodule = DEBUG,日報 log4j.additivity.com.mycompany.myapplication.mymodule =假

    另外,如果設置了加爲false,你要確保信息得到由你指定的appender只有 記錄。

  2. jar的'root'通常不包含在CLASSPATH中,因此jar中的log4j.properties對JVM應該是不可見的。