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

Log4j2日志留存配置异常:部分历史日志未保留问题排查

问题

我在项目中使用Log4j 2.17库,需在服务器上留存日志14天,已配置log4j2.properties文件(配置代码如下)。测试时将留存时长设为2天,5月28日查看日志时,28日有6个日志文件、27日10个10MB日志文件完整存在,但26日仅保留了app.log.2024-05-26.5/6/7这3个文件;5月29日查看时,27、28日的10个日志文件均完整留存。请问为何26日仅保留部分日志文件?

配置代码

status=error

name = PropertiesConfig

property.basePath=C:/logs
property.filename=C:/logs/app.log

filters=threshold

filter.threshold.type=ThresholdFilter
filter.threshold.level=debug

appenders=PR01
#appender.PR01=org.apache.log4j.core.appender.RollingAppender
appender.PR01.type=RollingFile
appender.PR01.name=RollingFile
appender.PR01.fileName=${filename}
appender.PR01.filePattern=C:/logs/app.log.%d{yyyy-MM-dd}.%i
appender.PR01.layout.type=PatternLayout
appender.PR01.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.PR01.policies.type=Policies
appender.PR01.policies.size.type=SizeBasedTriggeringPolicy
appender.PR01.policies.size.size=10MB
appender.PR01.strategy.type=DefaultRolloverStrategy
appender.PR01.strategy.max=10
appender.PR01.strategy.delete.type=Delete
appender.PR01.strategy.delete.basepath=${basePath}
appender.PR01.strategy.delete.maxDepth=1
appender.PR01.strategy.delete.ifLastModified.type=IfLastModified
appender.PR01.strategy.delete.ifLastModified.age=14D
appender.PR01.strategy.delete.PathConditions.type=IfFileName
appender.PR01.strategy.delete.PathConditions.glob=app.log\*

loggers=PR01

logger.PR01.name=com.java.logs.Log4j2Project
logger.PR01.level=debug
logger.PR01.additivity=false
logger.PR01.appenderRef.rolling.ref=RollingFile
分析与解答

问题核心在于Log4j 2删除策略的时间判定逻辑,结合你测试时设置的2天留存阈值具体执行:

  1. 删除判定的核心依据
    配置中的IfLastModified条件是基于文件实际最后修改时间,而非日志文件名中的日期。系统会检查每个日志文件的最后修改时间是否早于「当前时间 - 2天」,满足条件的文件会被自动删除。

  2. 5月28日的现象原因

    • 5月26日生成的编号0-4的日志文件,是当日较早时段产生的,它们的最后修改时间早于「5月28日当前时间 - 2天」的节点,因此被判定为过期并删除。
    • 编号5-7的文件是5月26日较晚时段生成的,最后修改时间尚未超过2天的阈值,所以被保留。
  3. 5月29日的现象原因
    到5月29日时,5月26日所有文件的最后修改时间都已早于「5月29日当前时间 - 2天」,因此被全部清理;而5月27日的文件最后修改时间在5月27日,距离5月29日未超过2天,符合留存要求,所以完整保留。

补充说明:配置中的strategy.max=10仅控制单日内最多生成10个分片日志文件(按10MB滚动触发),这就是27日有完整10个文件的原因,该参数和历史文件的删除逻辑无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:17:11