Log4j-配置和级别的区别

时间:2021-04-26 11:34:01

标签: spring tomcat logging log4j log4j2

谁能解释一下Log4j的以下配置是做什么的?

我对标签 Configuration = WARN 和 Root level="INFO" 特别感到困惑。

如果配置意味着捕获 WARN 消息,为什么是 Root level INFO? 它们之间的关系如何?

该代码段是否将附加程序控制台分配给根记录器?

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

2 个答案:

答案 0 :(得分:1)

status 属性配置 StatusLogger 的级别。这是一个特殊的记录器,位于记录器层次结构之外,它将 Log4j2 框架的内部事件记录到 System.err

它可能仅在您调试新的 Log4j2 配置时有用。

另一方面,level 记录器的 <Root> 属性配置了所有记录器的默认级别。

答案 1 :(得分:1)

Piotr 的回答是正确的。不过,更详细地说,Log4j 实际上有多个 Log4j API 实现。

在 API 中是 SimpleLogger,它在不存在日志记录实现时允许最少的日志记录。它只允许通过系统属性进行最少的配置。

API 中还有 StatusLogger。它还实现了 Log4j API。 Log4j 实现在内部使用 Log4j API 进行所有诊断日志记录。由于它必须记录自身的启动和配置,因此它使用 StatusLogger 来做到这一点。这个实现有点类似于 SimpleLogger,因为它不是很可配置。您几乎唯一可以控制的是它是否记录到控制台或文件。

如果您设置 status="OFF",那么即使您的配置搞砸了,Log4j 也不会打印任何诊断信息。但是,即使这样,您也可以在启动时指定 -Dlog4j2.debug=true 并且 Log4j 将发出调试日志。这些在配置出现问题时非常有用。

相关问题