Search on the blog

2013年1月26日土曜日

Learn log4j(2)

1つのloggerに複数のappenderを持たせて、
  • loggerで設定したlevel以上の場合はコンソール表示
  • errorの場合は、追加でファイルにログを出力(前提条件: logger自体のレベルがerror以上の場合)
というのをやってみました。

[src/log4j.xml]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c::%M() - %m%n" />
        </layout>
    </appender>
    <appender name="file" class="org.apache.log4j.FileAppender">
        <param name="File" value="tmp/error.log" />
        <param name="Append" value="true" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c::%M() - %m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="error" />
            <param name="levelMax" value="error" />
        </filter>
    </appender>
    <root>
        <level value="info" />
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>
</log4j:configuration>
上のように、appenderのfilter機能を使うとうまくいきます。これを使えば、レベル毎に
  • DBに書き込む
  • メールを飛ばす
  • ファイルに書き込む
などの設定が行えます。
logger単位のレベルの制御しか知らなかったけど、appender毎にも制御できるんですねー。便利ですねー。

0 件のコメント:

コメントを投稿