Q2:WARN レベルのみ出力するには?

特定のレベルのみ出力させるには 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 に記述がありますのでそちらを参照して下さい。


トップページへ戻る