【问题标题】:Log4j- difference between Configuration and LevelLog4j-配置和级别的区别
【发布时间】:2021-07-19 18:48:48
【问题描述】:

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

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

如果配置意味着捕获警告消息,为什么是根级别信息? 它们有什么关系?

sn-p 是否将 appender 控制台分配给 Root logger?

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

【问题讨论】:

    标签: spring tomcat logging log4j log4j2


    【解决方案1】:

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

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

    另一方面,&lt;Root&gt; 记录器的level 属性配置所有记录器的默认级别。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 所以这个sn-p只是配置了StatusLogger? Root level="INFO" 有什么作用?
      • 它会过滤发送到根记录器的事件,以便只记录信息、警告、错误和致命消息。
      • 所以配置状态与Root标签无关,只与StatusLogger有关?如果是这样,那我就不能把状态排除在外吗?
      • 是的,你可以省略属性,在这种情况下它相当于status="ERROR"。但是,如果您将来需要调试配置,离开它可能会派上用场。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      相关资源
      最近更新 更多