log4jがバックアップサイクルを制限するのはなぜですか?

1
2022.03.08

ロギングにlog4jを使用するJavaアプリがあります。 log4Shellが怖くなり、2.17.1にアップグレードすることを余儀なくされるまで、すべてが順調でした。

私のアプリは、起動、時間、サイズに基づくロールオーバー戦略を使用しています。通常、1日あたり約6個のログファイルが生成されます。しかし、物事が本当におかしくなる日もあります(そして、私はそれらのログファイルが最も必要です)、ファイルの数は1日に100を超える可能性があります。プログラムはクラッシュし続け、ウォッチドッグはそれを起こし続けます。

以前に実行されたバージョンは、log4jバージョン以外は何も変更されず、固定数(おそらく100)の後に最後のログファイルの上書きを開始しました。ファイル名に%04iを使用し始めたので、読みやすいサイクル数が得られました。私の現在の設定では、最後のファイルはもうゴミ箱に入れられませんが、これは起こります:

 -rw-r--r-- 1 xxxxxxx xx    588 Mar  8 17:08 TRACE.2022-03-08-17.0096.log
-rw-r--r-- 1 xxxxxxx xx    213 Mar  8 17:08 TRACE.2022-03-08-17.0097.log
-rw-r--r-- 1 xxxxxxx xx    588 Mar  8 17:09 TRACE.2022-03-08-17.0098.log
-rw-r--r-- 1 xxxxxxx xx    213 Mar  8 17:09 TRACE.2022-03-08-17.0099.log
-rw-r--r-- 1 xxxxxxx xx  65619 Mar  8 17:26 TRACE.2022-03-08-17.0100.log

100になると、log4jは単にサイクリングを停止します。

ドキュメントには、そのような制限については言及されていません。何が得られますか?

以下は私の最新の構成です。このアプリは最小限の例であり、ファイルをわずか500バイトでロールし、数日ではなく時間境界でサイクルを再開することを目的としていますが、原則は引き続き適用されます。

構成も、トリガーとロールオーバー戦略、ファイル名パターン、およびアペンダーの組み合わせに関する多くのバリエーションの1つのサンプルです。私が試したすべてがこの制限に達しました。

いくつかの回避策を考えることができますが、問題の原因をよりよく理解したいと思います。私が得ることができる洞察やアドバイスをいただければ幸いです。

   1 <?xml version="1.0" encoding="UTF-8"?>
  2 <Configuration status="WARN">
  3     <Appenders>
  4         <RollingFile name="TRACE"
  5                 filePattern="./trace/TRACE.%d{YYYY-MM-dd-HH}.%04i.log">
  6                 <!-- ex-fileName=   "./trace/TRACE.log" -->
  7             <Policies>
  8                 <OnStartupTriggeringPolicy />
  9                 <SizeBasedTriggeringPolicy size="500 B" />
 10                 <TimeBasedTriggeringPolicy />
 11                 <!-- CronTriggeringPolicy schedule="0 0 * * * ?" / -->
 12             </Policies>
 13             <DirectWriteRolloverStrategy />
 14             <PatternLayout>
 15                 <header>%d{ISO8601} ---------- Trace file started. ----------\n</header>
 16                 <footer>%d{ISO8601} ----------- Trace file ended. -----------\n</footer>
 17                 <Pattern>%d{ISO8601} [%-4.-4t %-15.-15M#%4L] %-5level %msg%n%xEx{full}</Pattern>
 18             </PatternLayout>  "/>
 19         </RollingFile>
 20     </Appenders>
 21     <Loggers>
 22         <Root level="error">
 23             <AppenderRef ref="TRACE"/>
 24         </Root>
 25         <Logger name="minimal" level="trace" additivity="false">
 26             <AppenderRef ref="TRACE"/>
 27         </Logger>
 28     </Loggers>
 29 </Configuration>
回答
1
2022.03.08

%04iがロールオーバーを防ぐという私の考えには、何かが含まれているようです。

<RollingFile>タグ内にエントリを追加する

<DefaultRolloverStrategy max="200"/>

100の制限を回避するのに役立ちました。

回避策として、いくつかのクリーンアップ方法を使用して、大きな最大制限を選択することができます。

Appendersのドキュメントによると、 nomax引数も存在します。これも役立つ可能性があります。