log4j2记录器配置级别不覆盖根记录器级别



根据log4j文档,如果我为com.a.b.c包定义一个记录器配置,级别为ERROR,根记录器级别设置为DEBUG,则只有ERROR日志应该来自com.a.b.c中的类,而其他类应该打印DEBUG日志。因此,我有下面的log4j2-test.xml。

然而,在我的情况下,com.a.b.c类的INFO级日志仍然被打印。我有误解什么吗?我应该怎么做,使类在com.a.b.c打印ERROR日志,而所有其他类打印INFO日志?

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" name="PropertiesConfig" packages="org.apache.logging.log4j.test">
<Properties>
<Property name="basePath">target/</Property>
</Properties>
<ThresholdFilter level="trace"/>
<Appenders>
<Console name="consoleLogger" target="SYSTEM_OUT">
<PatternLayout pattern="%d{dd-MM-yyyy HH:mm:ss.SSS} %style{[%t]}{magenta} %highlight{%-5level}{TRACE=cyan, DEBUG=green, INFO=yellow, WARN=blue, ERROR=red} [%-60.60c] : %m%n" />
</Console>
<File name="fileLogger" fileName="${basePath}app.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%c] [%M] [%l] : %msg%n" />
</File>
</Appenders>
<Loggers>
<Root level="INFO" >
<AppenderRef ref="consoleLogger" />
<AppenderRef ref="fileLogger" />
</Root>
<Logger name="com.a.b.c" level="ERROR" additivity="false">
<AppenderRef ref="consoleLogger" />
<AppenderRef ref="fileLogger" />
</Logger>
</Loggers>
</Configuration>

我明白了。有问题的类(奇怪的是)在获取记录器时没有使用自己的类名。通常它是LoggerFactory.getLogger(com.a.b.c),但在我的情况下,类正在做LoggerFactory.getLogger(java.io.Console),因此我们的记录器配置<Logger name="com.a.b.c" level="ERROR" additivity="false">将不适用于来自这个类的日志。我必须为类java.io.Console添加一个记录器配置。

最新更新