我希望实现以下目标:
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-logfile中消失。我要找的东西可能是这样的:
log4j.appender.FILE_DEBUG.de.foo.Threshold=DEBUG但这并不管用。感谢您的帮助:)
发布于 2012-11-23 03:03:28
我认为正确的方法是为附加器STDOUT编写自定义筛选器。因此,您将能够为特定包设置最低级别的控制台日志。下面是一个类似过滤器的例子:log4j isolating certain level from a class。
请注意,您应该使用XML配置,因为过滤器在属性配置中不受支持。
发布于 2012-11-23 03:58:18
在log4j中是不可能的,使用logback,无论如何它都更好(顺便说一句,使用slf4j facade)
https://stackoverflow.com/questions/13517617
复制相似问题