java - 読み込み - 過去7日間のログファイルのみを保持するようにlog4jを設定するにはどうすればよいですか?




timebasedtriggeringpolicy (9)

DailyRollingFileAppenderもあります。 http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html

編集:この心配な文を読んだ後。

DailyRollingFileAppenderは、同期の問題とデータの損失を示すことが観察されています。 log4j extrasコンパニオンには、新しいデプロイメントのために考慮する必要があり、org.apache.log4j.rolling.RollingFileAppenderのドキュメントで説明されている代替案が含まれています。

上記のURL(私がこれまでに気づかなかったもの)から、これはより良い賭けのように見えます; http://logging.apache.org/log4j/companions/extras/apidocs/index.html

ロギングにlog4jを使用するいくつかのJavaアプリケーションで、以下のロギングの問題があります。

ログファイルを毎日ローテーションしたい

log.2010-09-10
log.2010-09-09
log.2010-09-08
log.2010-09-07
log.2010-09-06
log.2010-09-05
log.2010-09-04

しかし、データのセキュリティ上の理由から、私たちは会社でログファイルを7日間以上保管することはできません。 次の次のログファイルlog.2010-09-11が生成されると、 log.2010-09-11の削除がlog.2010-09-04ます。 log4jこのような動作を設定することは可能ですか? もしそうでなければ、この種のロギングの問題のためのもう一つの洗練されたソリューションをご存知ですか?


Linuxを使用している場合は、tmpwatchを使用してcronジョブを設定できます。

ほとんどのLinuxシステムには、/ tmpディレクトリをクリーンアップするtmpwatch cronジョブがあります。 ロギングディレクトリを監視し、7日以上経過したファイルを削除する別のものを追加することができます。

別のシステムを使用している場合は、おそらく同等のユーティリティがあります。


chroneジョブを開始するように促し、タスクのために、log4j2.propertiesファイルをlogstashのconfigフォルダに使用することができます。 下のリンクをご覧ください。これは参考になります。

https://github.com/elastic/logstash/issues/7482


log2jに古いログを削除する機能が追加されました。 DefaultRolloStrategyタグと以下のスニペットを見てください。 同じ日に最大10個のアーカイブを作成し、プロパティタグの下に定義した$ {baseDir}ディレクトリを解析し、ログファイル名が "app - *。log.gz"に一致し、7より古いログを削除します最新の5つのログが7日より古い場合は、最新の5つのログを保持してください。

  <DefaultRolloverStrategy max="10">
    <Delete basePath="${baseDir}" maxDepth="2">
      <IfFileName glob="*/app-*.log.gz">
        <IfLastModified age="7d">
          <IfAny>
            <IfAccumulatedFileCount exceeds="5" />
          </IfAny>
        </IfLastModified>
      </IfFileName>
    </Delete>
  </DefaultRolloverStrategy>

DailyRollingFileAppenderという別のオプションもあります。 それはあなたが探している機能を自動削除(7日間のログを維持)が欠けている

サンプル

log4j.appender.DRF=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRF.File=example.log
log4j.appender.DRF.DatePattern='.'yyyy-MM-dd

RollingFileAppender (maxSizeRollBackups、バックアップファイルの番号 )とDailyRollingFileAppender (ロール毎日)の両方の機能を組み合わせたorg.apache.log4j.CompositeRollingAppenderを呼び出します。

しかし、それを試していない、標準1.2ブランチlog4jの機能ではないようです。


ロールオーバーの1ヶ月前にログを保持するには、 log4j.appender.FILE.RollingPolicy.FileNamePatternの設定を使用します(例: log4j.appender.FILE.RollingPolicy.FileNamePattern=F:/logs/filename.log.%d{dd}.gz

私は1ヶ月間チェックするのを待たずに、mm(すなわち分)で試して上書きすることを確認したので、すべてのパターンでうまくいくと仮定しています。


次の記事では、log4jでこれを行うことはできません: MaxBackupIndexをDailyRollingFileAppender -log4jで使用してください

私の知る限りでは、この機能はlog4j 2.0にすることになっていましたが、その努力は分かれました。 ログバックWebサイトによると、logbackはlog4jの意図された後継です。

ロギングに共通のAPIを提供するSLF4JというAPIがあります。 実行時に実際のロギング実装をロードするので、提供する構成に応じて、java.util.logまたはlog4jまたはロギングまたはロギング機能を提供できるその他のライブラリを使用できます。 log4jを直接SLF4Jを使用することから始めるには少し前処理が必要ですが、このプロセスを自動化するためのツールがいくつか用意されています。 SLF4Jを使用するようにコードを変換したら、ロギングバックエンドを切り替えるだけで設定ファイルを変更することができます。


私はあなたが望むことをするこのアペンダーをhereで見つけました、それは日付によってロールオーバーされたファイルの特定の数を維持するように構成することができます。

ダウンロード: http://www.simonsite.org.uk/download.htm : http://www.simonsite.org.uk/download.htm

例(groovy):

new TimeAndSizeRollingAppender(name: 'timeAndSizeRollingAppender',
   file: 'logs/app.log', datePattern: '.yyyy-MM-dd',
   maxRollFileCount: 7, compressionAlgorithm: 'GZ',
   compressionMinQueueSize: 2,
   layout: pattern(conversionPattern: "%d [%t] %-5p %c{2} %x - %m%n"))

私は設定した:

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.DatePattern='.'yyyy-MM-dd
# Archive log files (Keep one year of daily files)
log4j.appender.R.MaxBackupIndex=367

私の前の他の人と同じように、DEBUGオプションは私にエラーを示しました:

log4j:WARN org.apache.log4j.DailyRollingFileAppenderの[maxBackupIndex]のようなプロパティはありません。

ここではまだ試していないアイデアがあります。必要な時間が経過した後にファイルが上書きされるようにDatePatternを設定するとします。 1年間の価値を保持するために、私は設定しようとすることができます:

log4j.appender.R.DatePattern='.'MM-dd

それはうまくいくのだろうか、それともエラーを引き起こすだろうか? それが見つかるには1年かかりそうですが、私は試してみることができます:

log4j.appender.R.DatePattern='.'dd

見つけ出すにはまだ1ヶ月かかるでしょう。