我的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
我的想法是
但WARN正在记录到debug.log和sysout.log。 TRACE也没有登录任何文件。
控制台正在使用TRACE和WARN。
你能告诉我我做错了吗
答案 0 :(得分:1)
您需要在脑海中分离记录器和追加器概念。
对于三个appender,请记住阈值是appender将处理的最低级别的消息。 appender将处理其阈值级别或任何更高级别的消息。
CA没有设置阈值,因此它会记录发送给它的所有消息,而不管级别如何。类似地,DA具有TRACE阈值,因此它也会记录发送给它的所有内容(因为TRACE是最低级别)。 FA具有WARN阈值,因此它将过滤掉低于WARN的任何消息 - 它将仅包含WARN,ERROR和FATAL消息。
上一段的重要部分是“发送给它的所有消息 ”。由于您已将根记录器配置为INFO级别并且尚未将任何特定记录器配置到较低级别,因此只有INFO及更高级别的消息才会发送到appender - DEBUG和TRACE消息将被静默删除。这就是您在任何记录器中都看不到TRACE输出的原因。