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="stdout" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<root>
<appender-ref ref="stdout"/>
</root>
</log4j:configuration>
全てのログを標準出力にそのまま吐き出す。
#ファイル出力
<?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.FileAppender">
<param name="File" value="./sample.log" />
<param name="Append" value="true" />
<param name="Encoding" value="Shift_JIS" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<root>
<appender-ref ref="file"/>
</root>
</log4j:configuration>
- 全てのログを
./sample.log
というファイルにそのまま吐き出す。 - 出力先のフォルダが存在しない場合は、自動で作成される。
#ロガー分け
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<appender name="file" class="org.apache.log4j.FileAppender">
<param name="File" value="./sample.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<logger name="log4j.sample.console">
<appender-ref ref="stdout" />
</logger>
<logger name="log4j.sample.file">
<appender-ref ref="file" />
</logger>
<root>
</root>
</log4j:configuration>
ロガーが log4j.sample.console
の場合は標準出力に、 log4j.sample.file
の場合はファイルに出力。
※root ロガーには何も設定していないが、もし他にもロガーがある場合は root にも appender を追加する必要あり。
#appender にログレベルを設定する
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<param name="threshold" value="error"/>
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<root>
<appender-ref ref="stdout" />
</root>
</log4j:configuration>
<param name="threshold" value="error"/>
で設定。
この場合、 error 以上 のみ出力。
#ロガーにログレベルを設定する
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<root>
<level value ="debug" />
<appender-ref ref="stdout" />
</root>
</log4j:configuration>
<level value ="debug" />
で設定。
この場合、 debug 以上 のみ出力。
#メッセージのフォーマット
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
<appender name="stdout" 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.SSS}] [%t] - %m%n" />
</layout>
</appender>
<root>
<appender-ref ref="stdout"/>
</root>
</log4j:configuration>
フォーマット | 出力されるもの | 使用例 |
---|---|---|
%p |
ログレベル | [%-5p] |
%d |
時刻 | %d{yyyy/MM/dd HH:mm:ss.SSS} |
%t |
スレッド名 | [%t] |
%m |
ログメッセージ | %m |
%n |
改行コード | %n |
%l |
ログ出力したソースコードの場所 | %l |
[FATAL] [2012/06/30 15:44:22.991] [main] - fatal
[ERROR] [2012/06/30 15:44:22.991] [main] - error
[WARN ] [2012/06/30 15:44:22.991] [main] - warn
[INFO ] [2012/06/30 15:44:22.992] [main] - info
[DEBUG] [2012/06/30 15:44:22.992] [main] - debug
log4j.Main.main(Main.java:11) message
#ファイルサイズでローテーションする
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
<appender name="sizeRotation" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="./sample.log" />
<param name="Append" value="true" />
<param name="Encoding" value="Shift_JIS" />
<param name="MaxFileSize" value="10KB" />
<param name="MaxBackupIndex" value="3" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<root>
<appender-ref ref="sizeRotation" />
</root>
</log4j:configuration>
sample.log
に出力しつつ、ファイルサイズが 10KB を超えたら sample.log.1
というふうにローテーションする。
MaxBackupIndex
に 3
を指定しているので、 sample.log.3
までローテーションして、それより古いファイルは削除される。
未指定の場合は、デフォルト 1
。
MaxFileSize
のデフォルトは 10MB。
#日付でファイルをローテーションする
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
<appender name="dailyRotation" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./sample.log" />
<param name="Append" value="true" />
<param name="Encoding" value="Shift_JIS" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<root>
<appender-ref ref="dailyRotation" />
</root>
</log4j:configuration>
毎日ローテーションする。
ローテーションされたファイルは、 sample.log.2013-01-29
という名前になる。
日付書式は SimpleDateFormat と同じ。
'.'yyyy-MM-dd-HH-mm-ss
とか指定すれば、秒単位でローテーションできる。
ちなみに、 古いファイルが自動で削除されることはない ので注意。
別途古いファイルを削除する仕組みが必要。
#参考