log4j可加性,类别日志记录级别和追加者阈值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j可加性,类别日志记录级别和追加者阈值相关的知识,希望对你有一定的参考价值。

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

这是场景(我的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日志记录级别。

  1. 我的观察是正确的还是我错过了什么?
  2. 我应该如何更改配置以便在server.log中仅实现ERROR级别日志记录?
答案

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

由于GeneraPurpose.classTypes具有INFO的水平,任何不如INFO严重的事件将被丢弃,但其余事件将被保留。

由于GeneralPurpose.classTypes具有true的可加性,因此启用的事件将被传递到层次结构中的父类别 - 具体包括GeneralPurpose

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

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

如果你想让defaultLogger只包括ERROR事件或更糟,请将其阈值设置为ERROR

以上是关于log4j可加性,类别日志记录级别和追加者阈值的主要内容,如果未能解决你的问题,请参考以下文章

log4j日志基本配置

Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法

log4j

Log4J日志配置详解

Log4J日志配置详解

Log4J日志配置详解