在Logback

时间:2018-05-03 07:14:33

标签: logging logback slf4j

我们知道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(终端打印机)
  3. 我们还添加了两个loggers,其中我们定义了一些自定义日志记录级别和自定义appender。例如:所有DEBUG日志将转到org.apache.cassandra.transport

    的QUERYLOGGER appender(磁盘上的另一个文件)

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

    如果我要禁用STDOUTFILE appender但仅为QUERYLOGGER记录器保留org.apache.cassandra.transport appender,该怎么办?

1 个答案:

答案 0 :(得分:7)

阅读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