Log4j2 2.17.1版本日志文件名无法添加当前日期后缀求助
问题分析与解决办法
问题根源
${date:yyyy-MM-dd}是配置加载时一次性计算的静态值,服务启动后如果不重启或刷新配置,这个日期不会自动更新。- 你配置了
TimeBasedTriggeringPolicy,RollingFile会自动扫描已存在的归档日志文件,复用最旧文件的日期作为当前日志文件的后缀,这就是为什么生成的文件带2023-07-07而不是当天日期。
解决方案
因为你不需要任何滚动策略和压缩,最适合的方案是改用FileAppender而非RollingFile,同时配置自动刷新配置来更新日期:
方案1:使用FileAppender(推荐)
<Configuration monitorInterval="86400"> <!-- 其他全局配置 --> <Appenders> <File name="EVENT_LOG_FILE" fileName="${path}/kpi/${logNamePrefix}_events-${date:yyyy-MM-dd}.log"> <PatternLayout pattern="TSL=%d{yyyyMMdd:HH:mm:ss.SS'Z'},%m%n" /> </File> </Appenders> <!-- 其他配置(如Loggers) --> </Configuration>
monitorInterval="86400":设置为24小时(86400秒),让Log4j每天自动重新加载配置,这样${date}会更新为当天日期,自动生成新的日志文件。- 不需要滚动策略,直接用FileAppender更贴合你的需求,避免RollingFile的归档逻辑干扰文件名。
方案2:坚持使用RollingFile(不推荐,仅适配需求)
如果你一定要保留RollingFile,需要移除滚动策略,并开启配置自动刷新:
<Configuration monitorInterval="86400"> <!-- 其他全局配置 --> <Appenders> <RollingFile name="EVENT_LOG_FILE" fileName="${path}/kpi/${logNamePrefix}_events-${date:yyyy-MM-dd}.log" filePattern="${path}/kpi/${logNamePrefix}_events-%d{yyyy-MM-dd}.log"> <!-- 移除所有Policies,因为不需要滚动 --> <PatternLayout pattern="TSL=%d{yyyyMMdd:HH:mm:ss.SS'Z'},%m%n" /> </RollingFile> </Appenders> <!-- 其他配置(如Loggers) --> </Configuration>
- 移除
TimeBasedTriggeringPolicy后,RollingFile不会再扫描旧归档文件的日期; monitorInterval同样保证每天自动刷新配置,更新文件名中的日期。
内容的提问来源于stack exchange,提问作者test
相关产品推荐
相关产品推荐

