log4j 可加性、类别日志记录级别和追加器阈值



我无法理解可加性、类别日志记录级别和追加器阈值之间的关系。

这是场景(我的 log4j.属性文件):

log4j.category.GeneralPurpose.classTypes=INFO, webAppLogger
log4j.additivity.GeneralPurpose.classTypes=true
log4j.category.GeneralPurpose=ERROR, defaultLogger
log4j.additivity.GeneralPurpose=false
log4j.appender.webAppLogger=org.apache.log4j.RollingFileAppender
log4j.appender.webAppLogger.File=webapps/someWebApp/logs/webApp.log
log4j.appender.webAppLogger.MaxFileSize=3000KB
log4j.appender.webAppLogger.MaxBackupIndex=10
log4j.appender.webAppLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.webAppLogger.layout.ConversionPattern=%d [%t] (%F:%L) %-5p - %m%n
log4j.appender.webAppLogger.Encoding=UTF-8
log4j.appender.defaultLogger=org.apache.log4j.RollingFileAppender
log4j.appender.defaultLogger.File=logs/server.log
log4j.appender.defaultLogger.MaxFileSize=3000KB
log4j.appender.defaultLogger.MaxBackupIndex=10
log4j.appender.defaultLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.defaultLogger.layout.ConversionPattern=%d [%t] (%F:%L) %-5p - %m%n
log4j.appender.defaultLogger.Encoding=UTF-8

见解:类别 通用.类类型 是 信息类别 通用.类类型具有可加性 TRUE类别 通用是错误类别 通用 有 加法性 假

使用当前配置,我会假设发送到类别 GeneralPurpose.classTypes.* 的信息消息只会记录到 webAppLogger,因为父记录器(类别)是使用错误级别日志记录设置的。但是,情况并非如此,消息记录两次(每个日志文件中记录一次)。看起来当事件作为加法的一部分发送时,不会考虑父类别的 ERROR 日志记录级别。

  1. 我的观察是否正确还是我错过了什么?
  2. 我应该如何更改配置以仅在服务器.log中实现错误级别的日志记录?

类别的级别确定是记录还是丢弃源自该类别的事件;它对从子类别接收的事件没有任何筛选效果。

由于GeneraPurpose.classTypes具有INFO级别,任何低于INFO的事件都将被丢弃,但其余的事件将被保留。

由于GeneralPurpose.classTypes的可加性为 true ,启用的事件将传递到层次结构中的父类别,特别是包括 GeneralPurpose

由于阈值未在webAppLogger上设置,它将记录它收到的所有事件。

由于阈值未在defaultLogger上设置,它将记录它收到的所有事件。

如果希望defaultLogger仅包含ERROR事件或更糟的事件,请将其阈值设置为 ERROR

最新更新