我无法理解可加性,类别记录级别和追加者阈值之间的关系。
这是方案(我的log4j.properties文件):
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
的见解: 类GeneralPurpose.classTypes是INFO 类GeneralPurpose.classTypes的可加性为TRUE 类别GeneralPurpose是ERROR 类GeneralPurpose的可加性为FALSE
使用当前配置我会假设发送到类GeneralPurpose.classTypes。*的INFO消息将仅记录到webAppLogger,因为父记录器(类别)设置了ERROR级别日志记录。但是,情况并非如此,消息记录两次(每个日志文件中有一个)。当事件作为可加性的一部分发送时,看起来不考虑父类别的ERROR日志记录级别。
答案 0 :(得分:3)
类别级别确定是否记录或丢弃源自该类别的事件;它对从子类别接收的事件没有任何过滤效果。
由于GeneraPurpose.classTypes
的级别为INFO
,因此任何不如INFO
严重的事件都将被丢弃,但其余的事件将被保留。
由于GeneralPurpose.classTypes
的可加性为true
,因此启用的事件将传递到层次结构中的父类别 - 具体包括GeneralPurpose
。
由于未在webAppLogger
上设置阈值,因此会记录收到的所有事件。
由于未在defaultLogger
上设置阈值,因此会记录收到的所有事件。
如果您希望defaultLogger
仅包含ERROR
个事件或更糟,请将其阈值设置为ERROR
。