web-dev-qa-db-ja.com

Log4j2 DefaultRolloverStrategyのmax属性は実際にどのように機能しますか?

RollingRandomAccessFileAppenderのみを設定してOnStartupTriggeringPolicyを構成しましたが、DefaultRolloverStrategyのmax属性をある数に設定すると、ログはその量を無期限に生成し続けます。

ここに私のlog4j2.xmlがあります:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <RollingRandomAccessFile 
            name="RollingRAF" 
            fileName="logs/app.log"
            filePattern="logs/app-%d{[email protected]}.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="5"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="myLogger" level="warn">
            <AppenderRef ref="RollingRAF"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

名前パターンにイテレータがないためですか?

ファイル名の精度が秒に設定されているためですか?

OnStartupTriggeringPolicyのみが設定されているためですか?

それともここで何が起こっているのでしょうか?

ここでの私の目標は、最後の5つのアプリケーションの実行を記録するローリング構成をセットアップすることでした。

26
Ceiling Gecko

TimeBasedTriggeringPolicyが指定されている場合、DefaultRolloverStrategyはfilePatternで指定された日付パターンを使用します。 max属性を使用するには、filePatternで%iパターンを指定し、ロールオーバーポリシーに<SizeBasedTriggeringPolicy size="20 MB" />を追加します。 (またはもちろん、他のサイズ。)

<DefaultRolloverStrategy max="5"/>のmaxの値により、同じロールオーバー期間(%d{[email protected]}の日付パターンを指定してから1秒)以内に、サイズベースの場合に作成されるファイルが5つ以下になることが保証されます。ロールオーバーがトリガーされました。

これは、毎日新しいフォルダーにロールオーバーするなど、ロールオーバーウィンドウが長く、そのフォルダー内で最大サイズ= 20 MBで作成されるファイルが5つ以下であることを確認する場合に便利です。


更新:

Log4j 2.5では、 カスタム削除アクション を設定する機能が追加されました。すぐに使用できるように、経過時間、カウント、または占有するディスク容量(累積ファイルサイズ)に基づいてファイルを削除できます。

27
Remko Popma