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