在 Logback 中覆盖从 root 继承的 Logger 的 appender

Override Logger's appender inherited from root in Logback

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

例如:

<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,我们在其中定义了一些自定义的日志记录级别和自定义的 appender。例如:所有 DEBUG 日志都将转到 QUERYLOGGER appender(这是磁盘上的另一个文件)org.apache.cassandra.transport

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

如果我想禁用 STDOUTFILE appender 但只为 org.apache.cassandra.transport logger 保留 QUERYLOGGER appender 怎么办?

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

<logger> 标签支持名为 additivity 的属性,默认设置为 true。将此值设置为 false 将阻止此记录器从父项继承。

对于这种情况:

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

Logback additivity example

Logback documentation