LoginSignup
121
134

More than 5 years have passed since last update.

log4j.xml書き方メモ

Last updated at Posted at 2013-10-13

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 というふうにローテーションする。

MaxBackupIndex3 を指定しているので、 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 とか指定すれば、秒単位でローテーションできる。

ちなみに、 古いファイルが自動で削除されることはない ので注意。
別途古いファイルを削除する仕組みが必要。

参考

121
134
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
121
134