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

Ev3*_*ing 4 logging logback slf4j

我们知道在Logback 中logger继承了它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>
Run Code Online (Sandbox Code Playgroud)

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

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

我们还添加了两个loggers我们定义了一些自定义日志记录级别和自定义appender.例如:所有DEBUG日志将转到QUERYLOGGER appender(磁盘上的另一个文件)org.apache.cassandra.transport

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

如果我想禁用STDOUTFILEappender但QUERYLOGGER只保留只有org.apache.cassandra.transportlogger的appender 怎么办?

Ev3*_*ing 7

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

<logger>tag支持additivity默认情况下设置为的属性true.将此值设置为false将阻止此记录器继承父项.

对于这种情况:

<logger name="org.apache.cassandra.transport" level="DEBUG" additivity='false'>
  <appender-ref ref="QUERYLOGGER" />
</logger>
Run Code Online (Sandbox Code Playgroud)

Logback可加性示例

Logback文档