2013-08-23 42 views
1

我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 

我understading是

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

但WARN正在记录到debug.log和sysout.log。另外,TRACE不记录任何文件。

控制台同时具有TRACE和WARN。

能否请你告诉我,我究竟做错了

回答

1

你需要在你的心中分开记录器和附加器的概念。

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

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

该段的重要部分是“发送给它的所有消息“。既然你已经配置了一个INFO级别的根日志记录器,并且没有将任何特定的日志记录器配置到较低级别,只有INFO及以上版本的消息才会被发送到appender - DEBUG和TRACE消息将被静默地删除。这就是为什么您在任何记录器中都看不到TRACE输出的原因。