Q1:WARN レベル以上のみ出力するには?

出力先によって出力レベルを分ける必要があるかどうかによって方法が分かれます。

出力先によって出力レベルを分ける必要がない場合

例えばファイルにも標準出力にもあるレベル以上しか出力しない場合は、root要素や後述のlogger要素にlevel要素を設定します。

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

  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern"
        value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </layout>           
  </appender>

  <root>
    <level value ="warn" />
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>

</log4j:configuration>

上記設定ではroot要素内のlevel要素の値が"warn"であるため、<appender-ref>で参照している標準出力にもファイルにもログレベルがWARN以上のログが出力されます。

ただ、標準出力にはすべてのログを出力し、ファイルにはINFOレベル以上のログを出力するといったように、出力先によってレベルを分けるケースの方が多いでしょう。その場合は次の Threshold パラメータを使います。

出力先によって出力レベルを分ける必要がある場合

出力先によって出力レベルを分けるには、appender要素に出力レベルの閾値を表す、Threshold パラメータを追加します。

以下は標準出力にすべてのレベルのログを出力し、ファイルへ WARN 以上のログを出力する設定です。 "FILE" アペンダのパラメータに Threshold を追加し、その値を WARN としています。これで FILE アペンダの出力先には WARN, ERROR, FATAL レベルのログだけが出力されます。

<?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="Threshold" value="WARN" />
    <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>       
  </appender>

  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern"
        value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </layout>           
  </appender>

  <root>
    <level value ="all" />
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>

</log4j:configuration>

尚、root要素内のlevel要素を省略した場合は、DEBUGレベル以上のログイベントが発生します。TRACEレベル(最も優先度の低いレベル)はログイベントが発生しません。TRACEレベルを使用していないのであれば、root要素の<level>は省略可能です。


トップページへ戻る