任意実行のJavaプログラムでLogbackのログファイルをRollingさせる設定メモ
cronによるバッチ処理の様な任意実行のJavaプログラムでlogbackを使うときに、ログのrolling設定でハマったのでメモ。
logbackのTimeBasedRollingPolicyを使って、過去一週間の日ごとのログに分けたかったので、公式のドキュメントのExample 4.6を参考にして下記のように設定しました。
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Encoding>UTF-8</Encoding> <File>logs/logFile.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>logs/logFile.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>7</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>[%-5level][%d{yyyy-MM-dd HH:mm:ss}] %class - %msg%n</Pattern> </layout> </appender>
ところが実際に動かしてみると、実行日が変わっても全てlogs/logFile.logにログが書き込まれてしまい、日ごとのログファイルも作成されません。
結果的にFileタグを除去して、
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Encoding>UTF-8</Encoding> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>logs/logFile.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>7</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>[%-5level][%d{yyyy-MM-dd HH:mm:ss}] %class - %msg%n</Pattern> </layout> </appender>
とすると、実施日ごとに直接ログファイル(例:logFile.2009-12-22.log)を作成してくれるようになりました。
未検証ですが、サーブレットコンテナで常時動くようなシステムであればFileタグを指定していても大丈夫なのかな。
上記の設定をTomcat上で動くアプリケーションに設定すると、$CATALINA_HOME/logs の中に保存されます。
2010年4月9日の記事に、新しい設定記法についてのせました。こちら。
そうそう、実行環境は
- logback-0.9.18
- slf4j-1.5.10
でした。