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

Log4j2 2.17.1版本日志文件名无法添加当前日期后缀求助

问题分析与解决办法

问题根源

  1. ${date:yyyy-MM-dd}是配置加载时一次性计算的静态值,服务启动后如果不重启或刷新配置,这个日期不会自动更新。
  2. 你配置了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:13:17