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

标签 log4j log4j2

我在我的 web 应用程序中使用以下 log4j RollingFile 附加程序。

<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 重命名),并且日志将在新文件中继续。

这里可能出现什么问题?

最佳答案

设置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 个日志文件需要滚动更新。

关于log4j2 RollingFileAppender 旧文件在 7 次翻转后被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46910092/

相关文章:

html - 如何在jsp页面文本区域显示tomcat登录(实时)?

grails - 配置log4j grails

spring-boot - Spring Boot - Log4j2 - 生成 2 个文件

java - 导入org.apache.log4j无法解析

log4j - 如何在surefire测试报告中显示log4j输出

java - Log4j 多个文件

configuration - 使用属性文件为不同的日志级别使用Log4j不同的附加程序

java - 为什么 log4j2 中有这么多 jar?

log4j2 - 以编程方式更改日志级别

java - log4j2如何记录包?