2016-01-09 35 views
5

は、私が欲しいのです:古いロールオーバーlog4j2ログを削除して、最大10個のファイルを保持する方法は?

  • 最大10のログファイル、サイズは50メガバイト以下
  • 各ログファイルに。

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

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

何が起こっていることは次のとおりです。

  • ログが50メガバイト
  • 後にロールオーバーしない。しかし10のログは一日あたりのを保持件まであります
  • このように保存されているログファイルの数の制限はありませんログフォルダ(例のために、2日間で、50メガバイトごとの20件のログを収集しているため)。ここ

はconfigがある:

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

私は間違っていますか?

答えて

4

2.5以降、Log4jはすべてのロールオーバーで実行されるcustom Delete actionをサポートします。

あなたがによって削除されたファイルを制御できます。

  1. 名前
  2. Age
  3. カウントを( "14日以上経過している場合削除")」維持(globまたはregexマッチング)唯一の3最新の「
  4. )サイズ(」 "500メガバイトまでの唯一の最新のファイルを保持)

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

を、彼らは少ないディスクスペースを取る作るためにcompress log files on rolloverあなたができることに注意してください。

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

+0

log4j 2.1で実行する方法はありますか? –

+0

Log4j関数ではありません。オペレーティングシステムの古いログを削除するスクリプトを作成する必要があります。 –

+1

アップグレードを強くお勧めします。アップグレードできない理由は何ですか? –

1

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

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

関連する問題