You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4j2 RollingFile配置后午夜未生成新日志文件问题排查

问题排查

你的配置存在以下4个核心问题,导致滚动策略失效:

  1. 依赖不完整/版本不匹配
    仅引入了log4j-slf4j-impl这一SLF4J适配层依赖,缺失log4j-api、log4j-core核心依赖,若log4j-core版本低于2.5,还会不支持CronTriggeringPolicy特性,最终配置失效退化为普通文件输出。
  2. 缺少根配置标签
    你贴出的log4j2.xml配置缺少外层<Configuration>根标签,属于非法的Log4j2配置文件,框架无法正常加载自定义配置,会使用默认配置输出日志。
  3. 存在非法配置字符
    Console和RollingFile节点下的PatternLayout配置行末尾多了多余的-字符,会导致配置解析失败,后续滚动策略不会生效。
  4. 触发策略配置不完善
    CronTriggeringPolicy默认evaluateOnStartup参数为false,若程序启动时间已经过了当日零点,不会主动触发上一周期的日志归档,长期运行时也可能出现调度触发异常。

解决方案

第一步:补全Maven依赖

保证三个核心依赖版本一致,且不低于2.5,推荐使用无安全漏洞的稳定版2.17.2:

<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.17.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.17.2</version>
    </dependency>
</dependencies>

第二步:修正log4j2.xml配置

修正所有语法错误,优化滚动策略,推荐直接使用TimeBasedTriggeringPolicy实现按天滚动,无需手动编写cron表达式,稳定性更高:

<?xml version="1.0" encoding="UTF-8"?>
<!-- status设为WARN可输出Log4j2自身运行日志,方便排查配置问题 -->
<Configuration status="WARN">
    <Properties>
        <Property name="baseDir">logs</Property>
        <!-- 修正原拼写错误patter→pattern -->
        <Property name="patternLayout">%d{[dd.MM.yyyy HH:mm:ss.SSS]} %l %p:%n %m%n</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${patternLayout}"/>
        </Console>

        <RollingFile name="RollingFile" fileName="${baseDir}/app.log"
                     filePattern="${baseDir}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}.log.gz">
            <PatternLayout pattern="${patternLayout}"/>
            <!-- 按天滚动配置:自动识别filePattern中%d的时间粒度为天,每日零点自动滚动 -->
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            <DefaultRolloverStrategy>
                <Delete basePath="${baseDir}" maxDepth="2">
                    <IfFileName glob="*/app-*.log.gz"/>
                    <IfLastModified age="60d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="trace">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
</Configuration>

如果要保留cron触发方案,将<TimeBasedTriggeringPolicy>替换为以下配置即可:

<CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>

内容的提问来源于stack exchange,提问作者Alexei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:45:03