【Java】logback.xml でINFOログの圧縮


概要

JavaのシステムログとしてINFOレベルのログも大量に出力する際、最大バイト数で区切りログファイルを圧縮し保存する。

修正前

logback.xml
...
    <appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>./logs/maker/system.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>./logs/maker/system.log.%d{yyyy-MM-dd}.gz</FileNamePattern>
            <!-- keep 7 days' worth of history -->
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <!-- <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</Pattern> -->
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5le %marker %lo{36} [%file:%line] - %msg %n</Pattern>
        </encoder>
    </appender>
...

修正後

logback.xml
....
    <appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>./logs/receiver/system.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>./logs/receiver/system.log.%d{yyyy-MM-dd}.%i.gz</FileNamePattern>
            <!-- keep 7 days' worth of history -->
            <maxHistory>7</maxHistory>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 1000MB -->
            <maxFileSize>1000MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <!-- <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</Pattern> -->
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5le %marker %lo{36} [%file:%line] - %msg %n</Pattern>
        </encoder>
    </appender>
....

修正点(差分)

  • ファイル名に %i を追加。
  • 以下のコードを追加する。
logback.xml
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
    <maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>

$ du -sh ./*
540K ./system.log
548K ./system.log.2021-03-26.gz
544K ./system.log.2021-03-27.gz
544K ./system.log.2021-03-28.gz
548K ./system.log.2021-03-29.gz
552K ./system.log.2021-03-30.gz
552K ./system.log.2021-03-31.gz
548K ./system.log.2021-04-01.gz
296K ./system.log.2021-04-02.0.gz

参考: