この単純な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
がデフォルトレベルに固執するように変更するにはどうすればよいですか?
カスタムフィルターを実装したくない場合は、固定のしきい値(この場合は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
アペンダーを追加します。 additivity="false"
属性は、ロガーがCONSOLE
から継承されたroot
アペンダーにログを記録するのを防ぎます。
<logger name="myapp.package1" additivity="false">
<appender-ref ref="INFO_CONSOLE" />
<appender-ref ref="FILE" />
</logger>
これにより、DEBUG
以上をFILE
およびCONSOLE
アペンダーに記録する必要があります。ただしmyapp.package1
はINFO
以上をCONSOLE
にのみ記録します。