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

Log4j2次日日志仍写入旧日期文件,需重启Tomcat才正常求助

Log4j2 日志日期不自动切换问题解决办法

这个问题我之前碰到过不少次,核心原因是你用的File Appender本身不支持按日期自动滚动日志文件——它只会在Tomcat启动时一次性解析文件名里的${date:yyyy-MM-dd}变量,生成当日的日志文件名。但日期切换后,它不会主动重新生成新文件名,导致后续日志依然写入前一天的文件,只有重启Tomcat才会重新解析变量。

先看你当前的配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <File name="CatalinaLog" fileName="${sys:catalina.base}/logs/catalina.${date:yyyy-MM-dd}.log" immediateFlush="true" append="true">
      <PatternLayout pattern="[TID=%X{TId}] %d{MMM dd, yyyy HH:mm:ss,SSS} %c %M:%L %p: %m%n"/>
    </File>
  </Appenders>
  <Loggers>
    <Root level="DEBUG" >
      <AppenderRef ref="CatalinaLog" />
    </Root>
  </Loggers>
</Configuration>

解决方案

要实现无需重启Tomcat、每天自动切换日志文件的效果,你需要用RollingFileAppender替代File Appender,再配合时间触发的滚动策略(TimeBasedTriggeringPolicy)来完成。

修改后的完整配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <!-- 用RollingFileAppender替代原有的File Appender -->
    <RollingFile name="CatalinaLog" 
                 fileName="${sys:catalina.base}/logs/catalina.log"
                 filePattern="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}.log">
      <PatternLayout pattern="[TID=%X{TId}] %d{MMM dd, yyyy HH:mm:ss,SSS} %c %M:%L %p: %m%n"/>
      <!-- 配置按天滚动的策略 -->
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
      </Policies>
      <!-- 可选:保留最近30天的日志,自动清理旧日志 -->
      <DefaultRolloverStrategy max="30"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="DEBUG">
      <AppenderRef ref="CatalinaLog"/>
    </Root>
  </Loggers>
</Configuration>

关键配置说明

  • RollingFileAppender:专门用于支持日志滚动的Appender,能根据配置的策略自动生成新的日志文件
  • fileName:指定当前正在写入的实时日志文件名(比如catalina.log)
  • filePattern:归档日志的文件名模板,%d{yyyy-MM-dd}会自动替换为当日日期,生成类似catalina.2018-03-23.log的归档文件
  • TimeBasedTriggeringPolicy:
    • interval="1":设置滚动周期为1个时间单位(这里因为filePattern用的是天级格式,所以代表每天滚动一次)
    • modulate="true":把滚动时间调整到自然时间的整点(比如每天凌晨0点自动切换,而不是Tomcat启动后的24小时)
  • DefaultRolloverStrategy:可选配置,设置保留的最大归档日志数量,超过后自动删除最旧的日志,避免磁盘被日志占满

这样配置后,每天凌晨日志会自动切换到新的日期命名文件,完全不用重启Tomcat就能解决你遇到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:24