2012-11-22 31 views
1

一個appender的變化閾值我要實現以下目標:log4j的:基於

All log-messages with TRACE or higher should be logged to log-trace.log 
All log-messages with DEBUG or higher should be logged to log-debug.log 

In general messages with DEBUG or higher should be logged to stdout, but: 
    for Class de.foo only INFO or higher should be logged to stdout, 
    for Class de.bar also TRACE and higher should be logged to stdout. 

我manged獲得分成文件的工作:

## Root logger 
log4j.rootLogger=trace,STDOUT,FILE_DEBUG,FILE_TRACE 
## Appenders 
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender 
log4j.appender.STDOUT.Threshold=DEBUG 
# File appenders 
log4j.appender.FILE_DEBUG=org.apache.log4j.RollingFileAppender 
log4j.appender.FILE_DEBUG.File=logs/log-debug.log 
log4j.appender.FILE_DEBUG.Threshold=DEBUG 

log4j.appender.FILE_TRACE=org.apache.log4j.RollingFileAppender 
log4j.appender.FILE_TRACE.File=logs/log-trace.log 
log4j.appender.FILE_TRACE.Threshold=TRACE 

# [..] Layouts 

但是,如果我嘗試更改標準輸出的調試級別,我還會更改進入文件的內容,例如

log4j.logger.de.foo=info 

使得來自foo的TRACE消息從跟蹤日誌文件中消失。我正在尋找的東西可能是這樣的:

log4j.appender.FILE_DEBUG.de.foo.Threshold=DEBUG 

但這並不起作用。感謝您的任何幫助:)

回答

1

我認爲正確的做法是爲appender STDOUT編寫自定義過濾器。因此,您可以爲特定軟件包設置最低級別的控制檯日誌。以下是一個類似的過濾器示例:log4j isolating certain level from a class

請注意,您應該使用XML配置,因爲過濾器在屬性配置中不受支持。

-1

不可能在log4j的,使用的logback,它的優越反正(順便說一句與SLF4J門面)

+0

爲什麼你認爲Artems的解決方案是不可能的? –

+0

當然,自定義代碼可以做任何事情,但是從盒子來看這是不可能的。我想平均項目只有足夠的東西來編寫自定義日誌appender – xeye