私が欲しいのは:
したがって、logsフォルダーが(50MB * 10)= 500MBを超えることはありません。
しかし、log4j2の設定が正しく行われていないようです。
何が起こっているのですか:
設定は次のとおりです。
<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="log/my.log" filePattern="log/my-%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
私は何が間違っているのですか?
2.5以降、Log4jはすべてのロールオーバーで実行される カスタム削除アクション をサポートします。
次の方法で、削除するファイルを制御できます。
上記は組み合わせることができます。ディスク使用量を最大500MBに抑えるためにサイズ条件を指定するだけでなく、関係のないファイルを誤って削除しないように、名前も一致させることをお勧めします。
削除するファイルをさらに細かく制御する必要があるユーザーは、サポートされているJSR-223スクリプト言語を使用してスクリプト条件を指定できます。
documentation をチェックしてください。役立つ可能性のある3つの完全な例があります。
あなたの質問のために、このスニペットはうまくいくかもしれません:
<DefaultRolloverStrategy>
<!--
* only files in the log folder, no sub folders
* only rolled over log files (name match)
* either when more than 10 matching files exist or when the max disk usage is exceeded
-->
<Delete basePath="log" maxDepth="1">
<IfFileName glob="my-??-??-????-*.log">
<IfAny>
<IfAccumulatedFileSize exceeds="500 MB" />
<IfAccumulatedFileCount exceeds="10" />
</IfAny>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
余談ですが、 ロールオーバー時にログファイルを圧縮する を使用して、使用するディスク容量を減らすことができることに注意してください。
最後に、注意してください!この方法で削除されたファイルを回復する方法はありません。 :-)
TimeBasedTriggeringPolicy
は、filePattern
に基づいて機能します。基本的に、ファイルパターンの最小時間単位(%d
)は、トリガー時間間隔です。あなたの場合、値は「dd」であるため、ポリシーは毎日トリガーされます。
filePattern
に%iが存在すると、複数のログファイルが1日保持されます。 filePattern
に%i
を入れずに試すことをお勧めします。