1

ファイルサイズに基づいてlog4jがファイルに無限に書き込むオプションを提供する既製のjar /クラスを見つけようとしています。つまり、log4jを次のように構成します。1.ファイルサイズが10メガになるまでログファイルに書き込みます2 . ファイルが 10 メガに達すると、「file_」+現在の日付のサフィックスに名前が変更されます。3. 新しいログファイルを開始 1 に移動

ファイルが 10240KB に達するたびにファイル engine.log の名前を engine_1.log に変更し
、メインの engine.log が再び 10240KB に達すると、engine_1.log を engine_2.log に、engine.log
を engine_1.log に名前変更します。
on ..
これは私が避けたいアクションです!
たとえば、それが引き起こす問題:
engine_1.log のコンテンツを確認すると、10 分後に同じファイルのコンテンツが変更されます。

毎回ファイルの名前を変更せずに、ログに簡単に書き込みたいだけです。私は自分自身を明確にしたことを願っています。

4

1 に答える 1

3

これは、標準の Log4j ライブラリでは実現できませんが、Log4j Extras Companionライブラリに実装されています。これは別の JAR ファイルであり、ここからダウンロードできます。

StandardRollingFileAppenderは、ログ ファイルのサイズに基づいてログのローテーション (ローリング) を実行します。ログ ファイルが指定されたサイズ制限に達すると、新しいログ ファイルが開始され、古いログ ファイルの名前が変更されて_1サフィックスが付けられます。既存のアーカイブ ログも、、、などのサフィックスを付けてローテーションされ_2ます_3

必要なのは、このデフォルトのログ ファイル命名ポリシーをオーバーライドして、カウンタの代わりにアーカイブ ログ ファイル名に現在の日付を使用することです。これはTimeBasedRollingPolicyフィルターで構成できます ( here is the documentation )。

Log4J 構成ファイル ( log4j.xml )を変更します。

<appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="Threshold" value="DEBUG"/>   
    <param name="File" value="engine.log"/>
    <param name="Append" value="true"/>
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" value="engine_%d.log" />
    </rollingPolicy>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %t %-5p [%c{1}] %m%n "/>
    </layout>
</appender>

この構成例は、公式の Log4J wikiから取得しました(ページの下部にあるフィルター構成その他の例のセクションを参照してください)。

アップデート:

extras ライブラリのRollingFileAppenderクラスには、以前のように最大ログ ファイル サイズを設定するための適切な属性がありませんRollingFileAppender。このプロパティは、トリガー ポリシーを使用して指定できます。この場合はSizeBasedTriggeringPolicyを使用する必要があります (ドキュメントはこちら)。トリガー ポリシーの構成は、ローリング ポリシーと同じです (関連する部分のみを示します)。

<appender ...>
    ...
    <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
        <param name="MaxFileSize" value="10000000" />
    </triggeringPolicy>
    ...
</appender>
于 2012-06-10T09:14:27.810 に答える