【问题标题】:Override Logger's appender inherited from root in Logback [duplicate]覆盖从 Logback 中的 root 继承的 Logger 的 appender [重复]
【发布时间】:2018-05-03 07:14:33
【问题描述】:

我们知道logger继承了root在Logback中的配置。

例如:

<root level="INFO">
  <appender-ref ref="FILE" />
  <appender-ref ref="STDOUT" />
</root>

<logger name="com.thinkaurelius.thrift" level="ERROR"/>
<logger name="org.apache.cassandra.transport" level="DEBUG">
   <appender-ref ref="QUERYLOGGER" />
</logger>

在这个logback.xml 中,我们定义了一个root,它有两个appender:

  1. FILE(将输出重定向到文件)
  2. STDOUT(终端打印机)

我们还添加了两个loggers,我们在其中定义了一些自定义的日志记录级别和自定义的附加程序。例如:所有 DEBUG 日志都将转到 QUERYLOGGER appender(这是磁盘上的另一个文件),用于org.apache.cassandra.transport

但是,org.apache.cassandra.transport 的所有调试信息也会出现在 STDOUTFILE 中,因为它继承了 root 的配置。

如果我想禁用 STDOUTFILE 附加程序,但只为 org.apache.cassandra.transport 记录器保留 QUERYLOGGER 附加程序怎么办?

【问题讨论】:

    标签: logging logback slf4j


    【解决方案1】:

    阅读 logback 的文档后。我自己找到了这个特定问题的答案:

    &lt;logger&gt; 标签支持一个名为additivity 的属性,默认设置为true。将此值设置为false 将阻止此记录器从父母那里继承。

    对于这种情况:

    <logger name="org.apache.cassandra.transport" level="DEBUG" additivity='false'>
      <appender-ref ref="QUERYLOGGER" />
    </logger>
    

    Logback additivity example

    Logback documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 2022-01-02
      • 2020-07-07
      • 2015-06-14
      • 1970-01-01
      相关资源
      最近更新 更多