在 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:
FILE
(将输出重定向到文件)
STDOUT
(终端打印机)
我们还添加了两个 loggers
,我们在其中定义了一些自定义的日志记录级别和自定义的 appender。例如:所有 DEBUG 日志都将转到 QUERYLOGGER appender(这是磁盘上的另一个文件)org.apache.cassandra.transport
然而,org.apache.cassandra.transport
的所有调试信息也出现在STDOUT
和FILE
中,因为它继承了root
的配置。
如果我想禁用 STDOUT
和 FILE
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>
我们知道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:
FILE
(将输出重定向到文件)STDOUT
(终端打印机)
我们还添加了两个 loggers
,我们在其中定义了一些自定义的日志记录级别和自定义的 appender。例如:所有 DEBUG 日志都将转到 QUERYLOGGER appender(这是磁盘上的另一个文件)org.apache.cassandra.transport
然而,org.apache.cassandra.transport
的所有调试信息也出现在STDOUT
和FILE
中,因为它继承了root
的配置。
如果我想禁用 STDOUT
和 FILE
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>