log4j2在7次翻转后,RollingFileAppender旧文件被删除

时间:2017-10-24 12:03:12

标签: log4j log4j2

我在webapp中使用了log4j RollingFile appender。

<Appenders>
    <RollingFile name="logFile"
                 fileName="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log" immediateFlush="true"
                 filePattern="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log.%d{yyyy_MM_dd.HH_mm_ss}.%i">
        <PatternLayout pattern="%d{yyyyMMdd-HHmmss.SSS}|%X{username}|%-5p|%t| %-100m (%c{1})%n"/>
        <Policies>
            <OnStartupTriggeringPolicy/>
        </Policies>
    </RollingFile>
</Appenders>

使用filePattern="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log.%d{yyyy_MM_dd.HH_mm_ss}.%i",当日志被翻转时,旧文件被重命名为带有索引号的文件名(用%i指定),因此所有旧文件都应重命名并保留。

我使用以下代码以编程方式翻转日志。

org.apache.logging.log4j.Logger logManagerLogger = LogManager.getLogger();
Map<String, org.apache.logging.log4j.core.Appender> appenders = ((org.apache.logging.log4j.core.Logger) logManagerLogger).getAppenders();
appenders.forEach((appenderName, appender) -> {
    if (appender instanceof RollingFileAppender) {
        LOGGER.info("Switching log for appender " + appenderName);
        ((RollingFileAppender) appender).getManager().rollover();
    }
});

但是,在7次翻转之后,现有文件被删除(未根据指定的filePattern重命名),并在新文件中继续记录。

这可能是什么问题?

2 个答案:

答案 0 :(得分:1)

设置DefaultRolloverStrategy(默认为7),在你的配置中将是:

    <Appenders>
    <RollingFile name="logFile"
                 fileName="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log" immediateFlush="true"
                 filePattern="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log.%d{yyyy_MM_dd.HH_mm_ss}.%i">
        <PatternLayout pattern="%d{yyyyMMdd-HHmmss.SSS}|%X{username}|%-5p|%t| %-100m (%c{1})%n"/>
        <Policies>
            <OnStartupTriggeringPolicy/>
        </Policies>
        <DefaultRolloverStrategy max="100"/>
    </RollingFile>
</Appenders>

现在,它将有100个日志文件进行翻转。

答案 1 :(得分:0)

如果要无限滚动文件,

根据Log4j2 documentation,从2.8版开始,可以通过将fileIndex属性设置为nomax来完成。例如:

<DefaultRolloverStrategy fileIndex="nomax" />