log4j
同一カテゴリのログに対して、levelに応じて別のappenderを適用する。
カテゴリを複数記述できないため、以下のようにする。
- appenderを複数適用する。
- appenderにてlevelに対してのfilterを設定する。
(filterは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="appender_1" class="org.apache.log4j.ConsoleAppender"> <filter class="org.apache.log4j.varia.LevelMatchFilter"> <param name="LevelToMatch" value="INFO"/> <param name="AcceptOnMatch" value="true"/> </filter> <filter class="org.apache.log4j.varia.DenyAllFilter"/> </appender> <appender name="appender_2" class="org.apache.log4j.FileAppdender"> <param name="File" value="log.txt" /> <param name="Append" value="true" /> <filter class="org.apache.log4j.varia.LevelMatchFilter"> <param name="LevelToMatch" value="ERROR"/> <param name="AcceptOnMatch" value="true"/> </filter> <filter class="org.apache.log4j.varia.DenyAllFilter"/> </appender> <category name="org.example"> <priority value="INFO" /> <appender-ref ref="appender_1" /> <appender-ref ref="appender_2" /> </category> </log4j:configuration>
- INFO以上のログを出力する。
- Filter設定により、levelがINFOならばConsoleAppenderが有効になる。
- Filter設定により、levelがERRORならばFileAppenderが有効になる。
- Filter設定により、それ以外はすべて無効化される。(DenyAllFilterがそれを実現している)