Spring Boot内のLogbackを用いて、ログローテートを行う際の設定について以下にまとめます。
ログローテする場合の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> <!-- 拡張子をgz、zipなどにすると自動で圧縮される--> <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コマンドで日付変更