web-dev-qa-db-ja.com

log4j2で古いログを削除する方法

(F.Y.I.すでにインターネットで多くのドキュメントを検索しました。storm-0.10.0-beta1を使用しています。Stormのlog4j2の構成ファイルはworker.xmlです)

今、私はlog4j2を使おうとしています。

古いログを削除する方法を探していますが、見つかりません。構成の一部は以下のようになります。

    <RollingFile name="SERVICE_APPENDER"
             fileName="${sys:storm.home}/logs/${sys:logfile.name}.service"
             filePattern="${sys:storm.home}/logs/${sys:logfile.name}.service.%d{yyyyMMdd}">
        <PatternLayout>
            <pattern>${pattern}</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
        <DefaultRolloverStrategy max="9"/>
    </RollingFile>

最初は、3日以上経過したログファイルが削除されることを期待していました。

しかし、実際にはそうではありません。

だから、古いログを削除する方法があるかどうか疑問に思います。

まだ聞き取れなかった方法がありましたらお知らせください。

9
obanadingyo

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

次の任意の組み合わせで、削除するファイルを制御できます。

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

削除するファイルをさらに細かく制御する必要があるユーザーは、サポートされているJSR-223スクリプト言語を使用してスクリプト条件を指定できます。

documentation をチェックしてください。役立つ可能性のある3つの完全な例があります。

あなたの質問では、このスニペットは機能するはずです:

  <DefaultRolloverStrategy>
    <!--
      * only files in the log folder, no sub folders
      * only rolled over log files (name match)
      * only files that are 4 days old or older
    -->
    <Delete basePath="${sys:storm.home}/logs/" maxDepth="1">
      <IfFileName glob="*.service.????????" />
      <IfLastModified age="4d" />
    </Delete>
  </DefaultRolloverStrategy>

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

9
Remko Popma

Log4jのこのJIRAエントリで、より多くの背景情報を見つけることができます。

https://issues.Apache.org/jira/browse/LOG4J2-524

TimeBasedTriggeringPolicyのみを使用すると、古いログファイルの自動削除が機能しない場合があるようです。

1
Marged