java - 如何配置log4j 2's additivity to respect parent' s级别?

标签 java logging configuration log4j log4j2

我认为这段代码很好地解释了我正在尝试做的事情

package us.benanderson;

public class MyClass {

  private static final Logger LOG = LogManager.getLogger(MyClass.class);
  ...
    // within a method
    LOG.debug("only output to appFile");
    LOG.error("output to both appFile and errorFile");

这就是我猜应该是我的配置

<Loggers>
    <Logger name="us.benanderson" level="debug" additivity="true">
        <AppenderRef ref="appFile" />
    </Logger>

    <Root level="error">
        <AppenderRef ref="errorFile" />
    </Root>
</Loggers>

但是,我发现当 additivity="true"时,调试消息也会输出到 errorFile。当 additivity="false"时,没有任何内容输出到 errorFile。有什么办法可以做我想做的事吗?

最佳答案

我认为实现你想要的最简单的方法是直接在 appender-ref 上放置一个级别。这消除了在您的配置中使用命名记录器的需要,稍微简化了配置。

如果您想将某个包的日志事件重定向到单独的附加程序,命名记录器仍然很有用。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <File name="appFile" fileName="logs/appFile.log" append="true">
      <PatternLayout pattern="%-5p %d{ABSOLUTE} [%t] %c - %m%n" />
    </File>
    <File name="errorFile" fileName="logs/errorFile.log" append="true">
      <PatternLayout pattern="%-5p %d{ABSOLUTE} [%t] %c - %m%n" />
    </File>
  </Appenders>
  <Loggers>
    <Root level="trace">
      <AppenderRef ref="appFile" level="debug" />
      <AppenderRef ref="errorFile" level="error" />
    </Root>
  </Loggers>
</Configuration>

如果您想进行更多不寻常的过滤,阈值过滤器和过滤器组合会特别有用。例如,如果您只想向某个附加程序发送 INFO 和 WARN 级别的事件,排除 TRACE/DEBUG,并且还排除 ERROR 和 FATAL 级别的事件(!),您可以这样做:

<Console name="only-info-warn">
    <PatternLayout pattern="%-5p %c %message %n" />
    <Filters>

        <!-- First deny error and fatal messages -->
        <ThresholdFilter level="error" onMatch="DENY"   onMismatch="NEUTRAL"/>
        <ThresholdFilter level="fatal" onMatch="DENY"   onMismatch="NEUTRAL"/>

        <!-- Then accept info, warn, error, fatal and deny debug/trace -->
        <ThresholdFilter level="warn"  onMatch="ACCEPT" onMismatch="NEUTRAL"/>
        <ThresholdFilter level="info"  onMatch="ACCEPT" onMismatch="DENY"/>
    </Filters>
</Console>

关于java - 如何配置log4j 2's additivity to respect parent' s级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532338/

相关文章:

selenium - 拆解后如何使用 Selenium RC 启动新的浏览器实例?

java - Swing 加速器 : inputMap or menu?

java - Logback,设置每天最大历史文件

linux - 如何将 linux 日志文件发送到中央服务器并通过 web 界面查看它们?

java - Logback 日志由应用程序保持打开状态,不会从磁盘中删除

configuration - 设计一个不可知的配置服务

java - SpringBoot SpringApplicationBuilder

java - Math.cos 给出大值的不良结果

java - 加载json数据并将其绑定(bind)到自定义布局

web-services - com.ctc.wstx.exc.WstxParsingException : Text size limit