2011-04-25 19 views
0

我正在使用slf4j + log4j和我的一個庫。slf4j:調試行爲不一致?

我在一個快速應用程序中使用它,我並不在乎配置日誌記錄......或者至少我不認爲我在乎。

如果我不配置log4j,我得到標準的警告消息

log4j:WARN No appenders could be found for logger com.xyz.abcdbabble 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

這是罰款。 如果我再做

logger.debug("Blah blah blah") 

然後記錄儀不能打印任何東西了。大!

但如果我這樣做

if (logger.isDebugEnabled()) 
{ 
    System.out.println("print some complex stuff:"); 
    print_some_complex_stuff(); 
} 

然後在括號內的東西被執行。是什麼賦予了?

我正在尋找一種方法來確定是否打印出來的東西,應該有相當的有利,以logger.debug(),即使log4j的沒有在最終應用配置。我怎樣才能做到這一點?

回答

1

而不是試圖搞清楚log4j的默認配置的邏輯,我會放在一個配置文件(log4j.properties),如:

log4j.rootLogger=debug, console 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n 

至少這讓您進入控制。

+0

它將最終用戶(運行* java的人)置於控制之中,這通常是您想要的東西。不是設計程序的人。在這種情況下,我不想要正常情況。我有一些愚蠢的用戶,他們不知道如何設置log4j,只想鍵入'java myClass arg0 arg1 arg2'。 – 2011-04-25 18:54:40

0

不是捆綁log4j,而是使用slf4j發行版中的「簡單」後端進行捆綁。然後事情就像你想要的那樣工作,用戶也不會鼓動。