log4j配置级别错误

时间:2013-08-23 18:12:48

标签: log4j

我的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
  4. 但WARN正在记录到debug.log和sysout.log。 TRACE也没有登录任何文件。

    控制台正在使用TRACE和WARN。

    你能告诉我我做错了吗

1 个答案:

答案 0 :(得分:1)

您需要在脑海中分离记录器和追加器概念。

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

CA没有设置阈值,因此它会记录发送给它的所有消息,而不管级别如何。类似地,DA具有TRACE阈值,因此它也会记录发送给它的所有内容(因为TRACE是最低级别)。 FA具有WARN阈值,因此它将过滤掉低于WARN的任何消息 - 它将仅包含WARN,ERROR和FATAL消息。

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

相关问题