在 Debian 上运行 Tomcat 时,日志时间不对通常是下面几类原因导致的。我按最常见到最少见给你梳理,并给出对应解决办法。
date
timedatectl
sudo apt install chrony -y
sudo systemctl enable --now chrony
或传统方式:
sudo apt install ntpdate
sudo ntpdate pool.ntp.org
✅ Tomcat 日志默认使用系统时间,系统时间错了,日志一定错。
timedatectl
如果看到:
Time zone: UTC
但你在中国,就会“差 8 小时”。
sudo timedatectl set-timezone Asia/Shanghai
或:
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
⚠️ 改完时区后,重启 Tomcat 才会生效
Tomcat 使用 JVM 时区,不一定等于系统。
在应用里或启动脚本加:
java -XshowSettings:properties -version
看:
user.timezone
setenv.shsudo nano /opt/tomcat/bin/setenv.sh
加入:
export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"
没有就新建该文件,并赋予执行权限:
chmod +x /opt/tomcat/bin/setenv.sh
catalina.sh(不推荐,维护性差)
如果是你自己的应用日志时间不对,但 catalina.out 正确:
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}{Asia/Shanghai} %p %c{1.} - %m%n"/>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS, Asia/Shanghai} %-5level %logger - %msg%n</pattern>
容器默认是 UTC:
docker run -e TZ=Asia/Shanghai ...
或在 Dockerfile:
ENV TZ=Asia/Shanghai
date 时间对吗?Asia/Shanghai 吗?user.timezone 对吗?如果你愿意,可以把下面信息发我,我可以直接帮你定位:
catalina.out 还是应用日志我可以直接给你精确修改命令。