在 Debian 上 Tomcat 日志时间不对,通常不是 Tomcat 本身的 bug,而是时区(TimeZone)配置问题。下面按最常见原因逐一说明,并给出解决办法。
Tomcat 使用 Java 虚拟机(JVM) 的时间,而 JVM 默认时区可能:
Tomcat 日志(catalina.out)一般使用:
new Date()
它依赖 JVM 时区。
timedatectl
或:
date
如果系统时间是错的,Tomcat 也可能错。
sudo timedatectl set-timezone Asia/Shanghai
setenv.sh 中指定(推荐)编辑或新建:
/opt/tomcat/bin/setenv.sh
(路径按你的 Tomcat 安装位置)
加入:
export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"
然后重启 Tomcat:
systemctl restart tomcat
# 或
/opt/tomcat/bin/shutdown.sh
/opt/tomcat/bin/startup.sh
catalina.sh 里加(不推荐)不推荐直接改 catalina.sh,升级时会覆盖。
如果你用的是 log4j2 / logback,它们也可能自己指定时区。
<pattern>%d{yyyy-MM-dd HH:mm:ss,Asia/Shanghai}</pattern>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}{Asia/Shanghai}"/>
如果是 Docker:
docker run -e TZ=Asia/Shanghai ...
或 Dockerfile:
ENV TZ=Asia/Shanghai
✅ Debian 系统时间正确
✅ timedatectl 时区正确
✅ Tomcat 启动参数包含 -Duser.timezone
✅ 日志框架未强制 UTC
✅ 容器环境设置了 TZ
写个 JSP:
<%= new java.util.Date() %>
如果页面时间和系统时间不一致,就是 JVM 时区问题。
如果你愿意,可以告诉我:
我可以给你精确修改方案。