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

Log4j2:当前日期追加写入文件功能失效问题求助

解决Log4j2按当日日期追加写入Catalina日志的问题

你的配置之所以没实现需求,是因为当前设置是先写入固定名称的catalina.log,等到每日触发滚动时才把它重命名为带日期的文件——这和你想要的「直接将当日日志写入对应日期的文件并持续追加」不符。

下面是调整后的配置,完全满足你的需求:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <RollingFile name="CATALINA"
                     fileName="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}.log"
                     filePattern="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="[TID=%tid] %d %-5p %c- %m%n"/>
            <!-- 每日午夜触发日志文件切换 -->
            <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
            <!-- 可选:如果需要限制单文件大小,取消下面的注释(示例为100MB) -->
            <!-- <SizeBasedTriggeringPolicy size="100MB"/> -->
            <!-- 核心配置:直接写入带日期的文件,跳过中间的固定名称文件 -->
            <DirectWriteRolloverStrategy>
                <FileNamePattern>${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            </DirectWriteRolloverStrategy>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="CATALINA"/>
        </Root>
    </Loggers>
</Configuration>

关键配置说明:

  • fileName:用%d{yyyy-MM-dd}动态生成当日日期的文件名,结合后续策略,当天所有日志都会追加到这个文件里。
  • TimeBasedTriggeringPolicy:interval=1表示每天触发一次文件切换,modulate=true确保切换发生在午夜(而不是应用启动后的24小时),完美贴合自然日的时间节点。
  • DirectWriteRolloverStrategy:这是实现需求的核心,它让Log4j2直接写入带日期的目标文件,不需要先写临时的catalina.log再重命名,完全符合你「按当日日期追加写入」的要求。
  • 可选的大小限制:如果担心单个日期的日志文件过大,可以启用SizeBasedTriggeringPolicy,当文件超过指定大小后,会自动生成带索引的文件(比如catalina.2024-05-20-1.log)继续写入。

注意事项:

  • 确保你的Log4j2版本在2.8及以上,DirectWriteRolloverStrategy是从这个版本开始引入的。
  • 验证${sys:catalina.base}系统变量指向的路径正确,且应用有该目录的写入权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:38