Log4j- Configuration 和 Level 的区别

Log4j- difference between Configuration and Level

有人可以解释一下 Log4j 的以下配置吗?

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

如果Configuration 意味着捕获WARN 消息,为什么Root 级别是INFO? 他们有什么关系?

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

<?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>

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

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

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

Piotr 的回答是正确的。不过,为了更详细一点,Log4j 实际上有 Log4j API.

的多个实现

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

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

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