在 Ubuntu 上 Tomcat 日志时间不对,通常不是 Tomcat 本身的 bug,而是时区(TimeZone)问题。下面按常见原因和解决办法说明。
Tomcat(Java)默认使用 JVM 的时区,而不是系统时间显示。
date
timedatectl
如果系统时间是对的,但 Tomcat 日志时间差 8 小时(常见于中国),说明 Tomcat 用了 UTC。
编辑 Tomcat 的启动环境文件:
# 方式一(systemd 管理)
sudo systemctl edit tomcat
# 方式二(catalina.sh)
vi $CATALINA_HOME/bin/setenv.sh
添加:
JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"
保存后重启:
sudo systemctl restart tomcat
sudo timedatectl set-timezone Asia/Shanghai
确认:
date
⚠️ 注意:
仅改系统时间,Tomcat 不一定生效,Java 可能仍用 UTC。
sudo update-alternatives --config java
或在 /etc/environment 加:
TZ=Asia/Shanghai
如果你用的是 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 容器默认是 UTC。
解决:
-e TZ=Asia/Shanghai
或
ENV TZ=Asia/Shanghai
✅ 几乎 100% 是 UTC vs CST(中国标准时间)
# 查看 JVM 时区
java -XshowSettings:properties -version 2>&1 | grep timezone
Tomcat 日志时间不对,99% 是 JVM 时区不是你所在时区,用
-Duser.timezone解决最直接。
如果你愿意,可以告诉我:
我可以给你精确的一行配置。