特定のレベルのみ出力させるには filter 要素を Appender に追加し、 Log4j 組み込みのフィルタで出力レベルのフィルタリングを行います。
Log4j org.apache.log4j.varia パッケージにいくつかフィルタが用意されています。
| クラス名 | 用途 |
|---|---|
| LevelMatchFilter | 特定のログレベルでフィルタリングする場合 |
| LevelRangeFilter | ログレベルの範囲でフィルタリングする場合 |
| StringMatchFilter | ログメッセージでフィルタリングする場合 |
| DenyAllFilter | 指示された以外のすべてのログを無効にする場合。通常上記のフィルタと共に使用する。 |
デフォルトではフィルタがかかっていない為、(Threshold 等で指示されない限り) logger のレベル指定に従ってログが出力されます。これを「指示したレベルだけ出力する」ようにするためには、出力させたいログを選別するフィルタと、DenyAllFilter を組み合わせる必要があります。
特定のレベルのみ出力させるためには、LevelMatchFilter を使います。このフィルタと
DenyAllFilter を appender 要素内の layout よりも後に記述します。以下は
WARN レベルのみファイルへログ出力を行う例です。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="log/example.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="WARN"/>
<param name="AcceptOnMatch" value="true"/>
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter"/>
</appender>
<root>
<level value ="debug" />
<appender-ref ref="FILE" />
</root>
</log4j:configuration>
filter 要素で LevelMatchFilter と DenyAllFilter を設定しています。LevelMatchFilter では LevelToMatch の値を WARN とし、WARN レベルの出力を許可しています。
尚このフィルタ設定は、XMLファイルのみ記述可能です。各フィルタのパラメータの説明は、Javadoc に記述がありますのでそちらを参照して下さい。