プログラミングメモ帳

プログラミングで躓いた部分を中心としたIT土方的メモ。

Log4j2 で日付ベースのログローテーション

Log4j2 で吐いたログに対して日付ベースでのログローテーションと時限削除をしたいとき、
logrorated 等のローテーション管理ソフトウェアに任せると、Log4j2 側がファイルを見失ってしまうので、ローテーションを Log4j2 側で実現してやる。

<Appenders>
    <RollingFile name="hoge" fileName="logs/hoge.log" filePattern="logs/hoge.%d{yyyy-MM-dd}.log">
        <PatternLayout pattern="%m%n" />
        <TimeBasedTriggeringPolicy />
        <DefaultRolloverStrategy>
            <Delete basePath="logs" maxDepth="1">
                <IfFileName glob="hoge*.log" />
                <IfLastModified age="7d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>
</Appenders>

DefaultRolloverStrategy の min, max は 日付ベースのローテーションに対して効かないので、
自分で Delete タグを使って削除をする必要がある。

単純に日付ベースで古いファイルを分けたいだけなら、特に何も考えず TimeBasedTriggeringPolicy すればよい。

参考

[LOG4J2-435] Feature request: auto-delete older log files - ASF JIRA