web-dev-qa-db-ja.com

最大10個のファイルを保持しながら、古いロールオーバーされたlog4j2ログを削除するにはどうすればよいですか?

私が欲しいのは:

  • 合計の最大10個のログファイル
  • サイズが50MB以下の各ログファイル。

したがって、logsフォルダーが(50MB * 10)= 500MBを超えることはありません。

しかし、log4j2の設定が正しく行われていないようです。

何が起こっているのですか:

  • ログは50MB後にロールオーバーします
  • ただし、最大10個のログが保持されます1日あたり
  • したがって、ログフォルダに保持されるログファイルの数に制限はありません(たとえば、2日間で、それぞれ50 MBのログが20個収集されるため)

設定は次のとおりです。

<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>

私は何が間違っているのですか?

8
pdeva

2.5以降、Log4jはすべてのロールオーバーで実行される カスタム削除アクション をサポートします。

次の方法で、削除するファイルを制御できます。

  1. 名前( glob または regex に一致)
  2. 年齢 (「14日以上経過した場合は削除」)
  3. カウント(「最新の3つだけを保持する」)
  4. サイズ(「500MBまでの最新のファイルのみを保持する」)

上記は組み合わせることができます。ディスク使用量を最大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>

余談ですが、 ロールオーバー時にログファイルを圧縮する を使用して、使用するディスク容量を減らすことができることに注意してください。

最後に、注意してください!この方法で削除されたファイルを回復する方法はありません。 :-)

8
Remko Popma

TimeBasedTriggeringPolicyは、filePatternに基づいて機能します。基本的に、ファイルパターンの最小時間単位(%d)は、トリガー時間間隔です。あなたの場合、値は「dd」であるため、ポリシーは毎日トリガーされます。

filePatternに%iが存在すると、複数のログファイルが1日保持されます。 filePattern%iを入れずに試すことをお勧めします。

1
Taha