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

log4j2 RollingFile Appender配置异常:无法生成指定历史日志文件

Log4j2 RollingFile Appender 配置错误分析及修复

你的配置存在三个关键问题,导致仅生成当前日志和编号为10的归档文件:

1. LevelRangeFilter 级别范围配置颠倒

日志级别顺序为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL,你设置的 minLevel="ERROR"、maxLevel="DEBUG" 是无效范围(没有级别能同时满足≥ERROR且≤DEBUG),这会导致过滤器拒绝所有日志,干扰滚动触发逻辑,引发异常归档行为。

修复:调换min和max级别,改为接受DEBUG到ERROR的日志:

<LevelRangeFilter minLevel="DEBUG" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>

2. Delete 元素的 basePath 路径错误

你配置的 Delete 元素中 basePath="${baseDir}",但日志文件实际存储在 ${logPath} 路径下,导致删除规则无法定位目标文件,滚动策略无法正确清理旧文件,进而造成归档编号异常。

修复:将basePath改为日志文件所在的${logPath}:

<Delete basePath="${logPath}">
    <IfAccumulatedFileCount exceeds="10" />
</Delete>

3. 滚动策略与删除规则的逻辑匹配

DefaultRolloverStrategy 的 max="10" 表示最多保留10个归档文件,加上当前日志文件共11个。你的删除规则 IfAccumulatedFileCount exceeds="10" 逻辑正确,但需确保basePath正确才能生效。

修复后的完整配置

<RollingFile name="F1" fileName="${logPath}/myApp.log" filepattern="${logPath}/myApp.log.%i" append="true" >
    <LevelRangeFilter minLevel="DEBUG" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout pattern="[%t] %d{yyyy-MM-dd HH:mm:ss.SSS} %5L %-5p %c{2} %M - %m%n"/>
    <Policies>
        <SizeBasedTriggeringPolicy size="10MB" />
    </Policies>
    <DefaultRolloverStrategy max="10">
        <Delete basePath="${logPath}">
            <IfAccumulatedFileCount exceeds="10" />
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>

修改后,当前日志达到10MB时会自动归档为myApp.log.1,后续依次递增至myApp.log.10;当生成第11个归档文件时,会自动删除最老的myApp.log.1,始终保持10个归档文件+1个当前文件的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:56:29