我有这个简单的Logback配置文件,包含两个appender和一些基于包名称的自定义日志记录级别。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%date{HH:mm}\t%-5level\t%msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>my_logger.log</file>
<encoder>
<charset>UTF-8</charset>
<pattern>%date{dd MMM HH:mm}|%class{0}|%-5level|%msg%n</pattern>
</encoder>
</appender>
<!-- custom logging levels -->
<logger name="myapp.package1" level="INFO" />
<logger name="myapp.package2" level="INFO" />
<root>
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
使用此配置,将为两个appender应用自定义日志记录级别。
如何更改它以便只有ConsoleAppender
使用这些自定义日志记录级别,而FileAppender
会保持默认级别?
答案 0 :(得分:7)
如果您不想实现自定义过滤器,可以创建一个具有固定阈值的新appender(在您的情况下为INFO
):
<appender name="INFO_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
...
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
然后,对于您的自定义日志记录级别,添加INFO_CONSOLE
和您的FILE
appender。 additivity="false"
属性可防止记录器记录到从CONSOLE
继承的root
appender。
<logger name="myapp.package1" additivity="false">
<appender-ref ref="INFO_CONSOLE" />
<appender-ref ref="FILE" />
</logger>
这应该将DEBUG
及更高版本记录到FILE
和CONSOLE
个追随者,myapp.package1
除外,INFO
只会记录CONSOLE
及以上{{1} }}