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
相关产品推荐
相关产品推荐

