Spring Boot内のLogbackを用いて、ログローテートを行う際の設定について以下にまとめます。
以下前提で設定しました。
- ローテ―トタイミング:日別
- 最大保存ファイル数:3
- 保存形式:gz (ローテ―ト時に圧縮)
<configuration>
<springProfile name="develop">
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<property name="logDir" value="/work/logs/batch/" />
<property name="fileName" value="TestBatch.log" />
<property name="format" value="%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-5le %lo{36} - %msg %n" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logDir}${fileName}</file>
<encoder>
<pattern>${format}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logDir}${fileName}.%d{yyyy-MM-dd}.gz</fileNamePattern>
<maxHistory>3</maxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${format}</pattern>
</encoder>
</appender>
<logger name="jp.co.test.batch" level="debug"></logger>
<root level="debug">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</springProfile>
%d{}変換指示子内の日時パターン文字列
java.text.SimpleDateFormatの規約に従う。
https://docs.oracle.com/javase/jp/7/api/java/text/SimpleDateFormat.html
→日付/時刻パターン
ログローテ単位毎の書き方
logFile.%d{yyyy-MM-dd}.log
%d{}のフォーマットを書き換えることで、ローテーションタイミングが決まる。
日次:logFile.%d.log → 2006-11-24
月次ローテ:logFile.%d{yyyy-MM}.log → 2006-11 ※ "%d{yyyy/MM}/logFile.log"とすると、月次ディレクトリが作成される
週次ローテ:logFile.%d{yyyy-ww}.log
毎時ローテ:logFile.%d{yyyy-MM-dd_HH}.log
毎分ローテ:logFile.%d{yyyy-MM-dd_HH-mm}.log
ファイルサイズでローテ―トしたい場合
triggeringPolicyをappender RollingFileAppender以下に追加する。
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<!-- ファイルサイズによってローテートする -->
<maxFileSize>20MB</maxFileSize>
</triggeringPolicy>
おまけ Windowsでシステム日付を変更する
Windowsで日付を変更してローテ―トのテストをしたい場合は、以下のコマンドを利用して見てください。
コマンドプロンプトを管理者で開いて、dateコマンドで日付変更
参考URL