任意実行の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日の記事に、新しい設定記法についてのせました。こちら。

そうそう、実行環境は

でした。