1

我的log4j配置如下

log4j.rootLogger=INFO, CA, FA, DA

#Console Appender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

#File Appender
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.File=/home/admin/logs/sysout.log
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.FA.Threshold = WARN



#File Appender 2
log4j.appender.DA=org.apache.log4j.FileAppender
log4j.appender.DA.File=/home/admin/logs/debug.log
log4j.appender.DA.layout=org.apache.log4j.PatternLayout
log4j.appender.DA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.DA.Threshold = TRACE

我的理解是

  1. INFO 将记录到控制台
  2. WARN 将记录到 sysout.log
  3. TRACE 将记录到 debug.log

但是 WARN 会同时记录到 debug.log 和 sysout.log。TRACE 也没有登录任何文件。

控制台同时具有 TRACE 和 WARN 。

你能告诉我我做错了什么吗

4

1 回答 1

1

您需要在脑海中分离 logger 和 appender 概念。

对于三个附加程序,请记住阈值是附加程序将处理的最低级别的消息。appender 将在其阈值级别或任何更高级别处理消息。

CA 没有设置阈值,因此无论级别如何,它都会记录发送给它的所有消息。同样,DA 有一个 TRACE 阈值,因此它还将记录发送给它的所有内容(因为 TRACE 是最低级别)。FA 的阈值为 WARN,因此它将过滤掉任何低于 WARN 级别的消息 - 它仅包含 WARN、ERROR 和 FATAL 消息。

上一段的重要部分是“发送给它的所有消息”。由于您已将根记录器配置为 INFO 级别,并且没有将任何特定记录器配置为较低级别,因此只有 INFO 及更高级别的消息将被发送到附加程序 - DEBUG 和 TRACE 消息将被静默丢弃。这就是为什么您在任何记录器中都看不到 TRACE 输出的原因。

于 2013-08-23T21:46:10.290 回答