在 log4j2 中设置 AppenderRef 或 Logger 的级别

Setting level on AppenderRef or Logger in log4j2

我有一个 log4j2.xml 配置文件,其中包含一个 Logger 和一个 Appender。

        <Logger name="LoggerName" additivity="false">
          <AppenderRef ref="AppenderName" level="info"/>
        </Logger>
        <!--  Single appender for logs -->
        <RollingFile name="AppenderName"
                     fileName="${basePath}/filename.csv.gz"
                     filePattern="${basePath}/filename.csv.gz.%d{yyyy-MM-dd-HH}.gz">
            <PatternLayout>
                <pattern>%m%n</pattern>
            </PatternLayout>
            <ThresholdFilter level="debug"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy fileIndex="nomax"/>
        </RollingFile>

这导致我的程序在 运行 时无法注销。我正在尝试使用 INFO 级别登录。但是,如果我将 Logger 定义修改为:

        <Logger name="LoggerName" additivity="false" level="info">
          <AppenderRef ref="AppenderName"/>
        </Logger>

...我的日志又开始工作了。据我所知,这两个都是有效的用例,并且考虑到我有一个 Logger 和一个 Appender,我认为它们应该是等价的。

我也尝试过不使用 ThresholdFilter,但没有成功。我在这里错过了什么?

谢谢,

每个记录器都有一个记录级别。如果您从 Logger 声明中省略 level 关键字,则它默认为 ERROR。 AppenderRef 上的级别不同。它实际上等同于向 AppenderRef 添加 ThresholdFilter,因此如果缺少 level 属性,就好像 ThresholdFilter 不存在一样。所以省略它只会导致事件传递给 Appenders。