2010-01-28 75 views
44

是否可以根據appender爲單個Logger配置不同的日誌級別?單個記錄器每個appender的日誌級別

我意識到這與question類似,就我已經有了自己而言,但問題在於閾值適用於所有記錄到該appender的記錄器,而我只想要閾值適用於單個記錄器。

即到目前爲止,我有這樣的事情:

log4j.rootLogger=WARN, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Threshold=WARN 
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout 

log4j.logger.mylogger=DEBUG,logfile 
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.logfile.DatePattern=${roll.pattern.daily} 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%d{${datestamp}} [%t] %-5p %C{2} - %m%n 
log4j.appender.logfile.File=mylogfile.log 

我想mylogger DEBUG消息被髮送到日誌文件附加目的地,但我也想mylogger INFO消息被髮送到stdout appender(但對於所有其他記錄器只有警告)。使用閾值將stdout限制爲WARN限制mylogger的輸出。

回答

46

啊哈,我固定它通過改變

log4j.appender.stdout.Threshold=WARN 

log4j.appender.stdout.Threshold=INFO 

本來應該更加小心首次輪。

+9

我推薦使用XML格式,它比較容易理解,IMO – skaffman 2010-01-28 12:49:13

+0

同意,並且它公開了通過屬性文件不可用的功能。 – Joel 2010-01-28 13:37:15

+0

不錯!這對我來說在一年後非常有用: - 我在運行時做到了這一點,不過在應用程序中,像這樣:myAppender.setThreshold(Level.INFO)。 – Jochem 2011-01-14 14:34:39