気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Logbackのログローテート設定

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コマンドで日付変更

f:id:tamata78:20210118181322p:plain

参考URL