1

現在、log4j2 を使用して、ログが 2000MB に達し、時間ベース、つまり次のロジックで 1 時間ごとにログをローテーションしています:-

<RollingRandomAccessFile name="test"
            fileName="${sys:log4j.logPath}/testlog" filePattern="${sys:log4j.logPath}/test-%d{yyyy-MM-dd-HH}-%i.log.gz">
            <PatternLayout>
                <Pattern>%d{ISO8601} %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="1990 MB" />
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingRandomAccessFile>

また、サーバーのシャットダウン時にログをローテーションしたいと考えています。以下にどのような設定を追加する必要がありますか?

OnStartupTriggeringPolicy を使用して、シャットダウン時にログをローテーションしました。ただし、サーバーの再起動で単一のリクエストを行った後、ログはローテーションされます。

しかし、サーバーのシャットダウン時にログをローテーションしたいです。それを行う方法はありますか?

4

2 に答える 2

1

上記の問題の解決策を見つけました。次のコードは私にとってはうまくいきます。

log4j.xml に「shutdownHook="disable"」を追加

<Configuration status="WARN" shutdownHook="disable">

rollover() のメソッド:-

public class RollOverLog4j {

    public static void rollover() {
        public final Logger logger = LogManager.getLogger("test");

        Map<String, Appender> appenders = ((org.apache.logging.log4j.core.Logger) logger).getAppenders();
        Iterator<Entry<String, Appender>> appenderIterator = appenders.entrySet().iterator();
        while (appenderIterator.hasNext()) {
            Appender appender = appenderIterator.next().getValue();
            if (appender instanceof RollingRandomAccessFileAppender) {
                ((RollingRandomAccessFileAppender) appender).getManager().rollover();
            }
        }
    }

}

サーバー停止時に rollover() を呼び出します:-

RollOverLog4j.rollover()
// shutting down log4j manually
Configurator.shutdown((LoggerContext) LogManager.getContext());

:- rollover() は、log4 2.3 バージョンのパブリック メソッドではありません。そのため、最新バージョン 2.6 を使用して動作させてください。

于 2016-06-15T07:30:11.050 に答える
1

質問のタイトルは、サーバーの再起動時にログをローテーションすることですが、質問はシャットダウン時にログをローテーションすることです。サーバーまたはシステムがクラッシュした場合、ファイルはローテーションされないため、シャットダウン時にログをローテーションすることは信頼できません。通常のシャットダウン時にロールする機能を実装できますが、そのためには Log4j の Jira 課題を作成する必要があります。

Log4j 2 は OnStartupTriggeringPolicy をサポートしています。ファイルが空でない限り、サーバーの起動時にファイルがロールオーバーされます。

于 2016-06-10T18:07:16.997 に答える