web-dev-qa-db-ja.com

さまざまなログバックアペンダーのパッケージ固有のログレベル

この単純なLogback構成ファイルがあり、2つのアペンダーと、パッケージ名に基づくいくつかのカスタムログレベルが含まれています。

<?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>

この構成では、カスタムログレベルが両方のアペンダーに適用されます。

ConsoleAppenderのみがこれらのカスタムログレベルを使用し、FileAppenderがデフォルトレベルに固執するように変更するにはどうすればよいですか?

9
Alphaaa

カスタムフィルターを実装したくない場合は、固定のしきい値(この場合は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_CONSOLEFILEアペンダーを追加します。 additivity="false"属性は、ロガーがCONSOLEから継承されたrootアペンダーにログを記録するのを防ぎます。

<logger name="myapp.package1" additivity="false">
    <appender-ref ref="INFO_CONSOLE" />
    <appender-ref ref="FILE" />
</logger>

これにより、DEBUG以上をFILEおよびCONSOLEアペンダーに記録する必要があります。ただしmyapp.package1INFO以上をCONSOLEにのみ記録します。

7
nyname00