log4j配置级别错误

log4j配置级别错误,log4j,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

我的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
我的理解是

  • 信息将被记录到控制台
  • 警告将记录到sysout.log
  • 跟踪将记录到debug.log
  • 但WARN同时被记录到debug.log和sysout.log中。此外,TRACE未登录任何文件

    控制台具有跟踪和警告功能


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

    你需要在头脑中区分记录器和附加器的概念

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

    CA没有设置阈值,因此它将记录发送给它的所有消息,而不考虑级别。类似地,DA有一个跟踪阈值,因此它还将记录发送给它的所有内容(因为跟踪是最低级别的)。FA有一个警告阈值,因此它将过滤掉低于警告级别的任何消息-它将只包含警告、错误和致命消息


    前一段的重要部分是“发送给它的所有信息”。由于您已使用INFO级别配置了根记录器,并且没有将任何特定记录器配置为较低级别,因此只有INFO和更高级别的消息将发送到appenders-调试和跟踪消息将被静默删除。这就是为什么您在任何记录器中都看不到跟踪输出。

    您需要在头脑中分离记录器和附加器概念

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

    CA没有设置阈值,因此它将记录发送给它的所有消息,而不考虑级别。类似地,DA有一个跟踪阈值,因此它还将记录发送给它的所有内容(因为跟踪是最低级别的)。FA有一个警告阈值,因此它将过滤掉低于警告级别的任何消息-它将只包含警告、错误和致命消息

    前一段的重要部分是“发送给它的所有信息”。由于您已使用INFO级别配置了根记录器,并且没有将任何特定记录器配置为较低级别,因此只有INFO和更高级别的消息将发送到appenders-调试和跟踪消息将被静默删除。这就是为什么在任何记录器中都看不到跟踪输出