Java log4j:根据类更改一个appender的阈值

Java log4j:根据类更改一个appender的阈值,java,log4j,Java,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 o

我希望实现以下目标:

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的跟踪消息从跟踪日志文件中消失。我要找的可能是:

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

但这不起作用。感谢您的帮助:)

我认为正确的方法是为appender标准输出编写自定义过滤器。因此,您将能够为特定包设置控制台日志的最低级别。下面是一个类似筛选器的示例:


请注意,然后应该使用XML配置,因为属性配置中不支持过滤器。

我认为正确的方法是为appender STDOUT编写自定义过滤器。因此,您将能够为特定包设置控制台日志的最低级别。下面是一个类似筛选器的示例:


请注意,然后应该使用XML配置,因为属性配置中不支持过滤器。

在log4j中不可能,请使用logback,无论如何它都是高级的(顺便说一句,使用slf4j facade)

在log4j中不可能,请使用logback,无论如何它都是高级的(顺便说一句,使用slf4j facade)

为什么您认为Artems解决方案不可能?当然,自定义代码可以做任何事情,但从盒子里看是不可能的。我想,除了自定义日志附件之外,一般项目都有足够的东西来编写代码。为什么您认为Artems解决方案不可能呢?当然,自定义代码可以做任何事情,但从盒子里看是不可能的。我想除了自定义日志附加器之外,一般的项目只有足够的东西来编写代码