针对不同Logback appender的特定于程序包的日志记录级别

时间:2016-03-18 13:57:34

标签: configuration logback

我有这个简单的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会保持默认级别?

1 个答案:

答案 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及更高版本记录到FILECONSOLE个追随者,myapp.package1除外,INFO只会记录CONSOLE及以上{{1} }}

相关问题