RollingFileAppender滚动日志时间戳异常,求触发策略正确组合方案
问题分析与解决方案
你的问题核心在于Logback默认用滚动操作发生的时间生成日志文件名中的%d时间戳,而非日志文件实际开始记录的时间,这就导致启动触发滚动时,时间戳和日志实际起始时间不匹配,甚至出现用结束时间当文件名的情况。
调整后的正确配置
<RollingFile name="RollingFile"> <FileName>${LOG_DIR}system.log</FileName> <FilePattern>${LOG_DIR}system%d{yyyy-MM-dd HH.mm.ss}.log.zip</FilePattern> <JsonLayout compact="true" eventEol="true" /> <Policies> <OnStartupTriggeringPolicy /> <CronTriggeringPolicy schedule="0 0 0 * * ?"/> <!-- 添加基础时间触发策略,协同其他策略工作 --> <TimeBasedTriggeringPolicy /> </Policies> <DefaultRolloverStrategy fileIndex="nomax"> <!-- 关键设置:用日志文件的创建时间(起始时间)生成时间戳 --> <TimeBasedFileNamingAndTriggeringPolicy useCurrentTimeForFileNaming="false" /> </DefaultRolloverStrategy> </RollingFile>
关键配置说明
- TimeBasedTriggeringPolicy:作为时间滚动的基础策略,和
OnStartupTriggeringPolicy、CronTriggeringPolicy兼容,确保滚动逻辑的时间维度一致性。 - useCurrentTimeForFileNaming="false":强制Logback使用日志文件的创建时间(即该文件开始记录日志的时间)填充
FilePattern中的%d,彻底解决时间戳和实际日志时间段不匹配的问题。 - 如果需要更清晰的归档结构,可以把
FilePattern调整为${LOG_DIR}system%d{yyyy-MM-dd}_%d{HH.mm.ss}.log.zip,先按天分组,再附加启动时间,方便后续日志检索。
内容的提问来源于stack exchange,提问作者wlfbck
相关产品推荐
相关产品推荐

