我想实现以下目标:
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.
我管理员要分割成文件:
## 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
但如果我尝试更改stdout的调试级别,我也会更改文件中的内容,例如
log4j.logger.de.foo=info
使来自foo的TRACE消息从trace-logfile中消失。我正在寻找的可能是:
log4j.appender.FILE_DEBUG.de.foo.Threshold=DEBUG
但这不起作用。感谢您的帮助:))
答案 0 :(得分:1)
我认为正确的方法是为appender STDOUT编写自定义过滤器。因此,您将能够为特定包设置最低级别的控制台日志。以下是类似过滤器的示例:log4j isolating certain level from a class。
请注意,您应该使用XML配置,因为属性配置中不支持过滤器。
答案 1 :(得分:-1)
在log4j中不可能,使用logback,无论如何它都是优越的(顺便说一下slf4j facade)