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

Log4j2 RollingFile仅保留4天日志,求问题原因排查

问题原因

你遇到的仅保留最近4天日志的问题,核心是缺少自定义的归档清理策略,同时未配置按时间触发归档的规则,导致Log4j2默认的滚动策略自动删除了旧日志:

  • 默认滚动策略的限制:Log4j2的RollingFileAppender默认使用DefaultRolloverStrategy,该策略默认仅保留7个归档文件。你的配置仅依赖SizeBasedTriggeringPolicy(按32MB滚动)和OnStartupTriggeringPolicy(启动时滚动),每天会生成多个归档文件,当总数超过7个时,会自动删除最早的文件,最终只留下最近几天的日志。
  • 未按时间触发归档:配置里缺少TimeBasedTriggeringPolicy,无法保证每天自动创建新归档目录并完成滚动,日志滚动完全依赖文件大小或服务启动,导致归档逻辑混乱。
  • 额外配置错误:fileName属性里的多余$符号($/home/myservice/myservice.log)属于无效配置,虽不直接导致日志丢失,但会影响路径解析,建议移除。
修复后的配置示例
<Configuration>
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) %c{1.} %m%n</Pattern>
            </PatternLayout>
        </Console>

        <RollingFile
                name="RollingFile"
                fileName="/home/myservice/myservice.log"
                filePattern="/mnt/logbackups/%d{yyyy-MM-dd}/myservice-%d{yyyy-MM-dd}-%i.log.gz" >
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) %c{1.} %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="32 MB"/>
                <!-- 添加按天触发归档的策略 -->
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <!-- 配置自定义清理策略,保留30天的日志 -->
            <RolloverStrategy type="Default">
                <Delete basePath="/mnt/logbackups" maxDepth="2">
                    <!-- 匹配所有归档日志文件 -->
                    <IfFileName glob="*/myservice-*.log.gz"/>
                    <!-- 删除30天前的日志 -->
                    <IfLastModified age="30d"/>
                </Delete>
            </RolloverStrategy>
        </RollingFile>
    </Appenders>
    <!-- 关联日志到指定Appender -->
    <Loggers>
        <Root level="info">
            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
</Configuration>
关键修复说明
  • 添加TimeBasedTriggeringPolicy:保证每天自动完成日志滚动,按日期创建独立目录,符合你按日划分的需求。
  • 配置DefaultRolloverStrategy+Delete规则:自定义日志保留时长(示例为30天),替代默认的文件数限制,彻底解决旧日志被误删的问题。
  • 移除fileName中的多余$符号:确保日志文件路径解析正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:25:23