温馨提示×

ubuntu tomcat日志时间不对咋整

小樊
48
2026-08-31 12:01:46
栏目: 智能运维

在 Ubuntu 上 Tomcat 日志时间不对,一般不是系统时间错了,而是 时区 / JVM 时区 / 日志格式 的问题。下面按“最常见 → 次常见”的顺序给你一套排查和解决方法。


一、先确认系统时间是否正确

date
timedatectl

如果系统时间就不对:

# 设置时区(比如中国)
sudo timedatectl set-timezone Asia/Shanghai

# 同步时间
sudo apt install ntpdate
sudo ntpdate ntp.aliyun.com

✅ 系统时间对了,再看 Tomcat。


二、Tomcat 日志时间不对的 3 个常见原因

✅ 1. JVM 使用的时区不对(最常见)

Tomcat 用的是 JVM 的时区,不是系统时间直接显示的。

查看当前 JVM 时区

java -XshowSettings:all -version 2>&1 | grep Timezone

如果你看到:

user.timezone = UTC

那日志时间大概率会快/慢 8 小时。


✅ 2. 给 Tomcat 指定 JVM 时区(推荐做法)

方法一:修改 catalina.sh

编辑:

sudo vim /opt/tomcat/bin/catalina.sh

# OS specific support 上面加:

export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"

然后重启 Tomcat:

sudo systemctl restart tomcat
# 或
/opt/tomcat/bin/shutdown.sh
/opt/tomcat/bin/startup.sh

✅ 推荐这种做法,最稳。


方法二:修改 setenv.sh(更规范)

sudo vim /opt/tomcat/bin/setenv.sh

内容:

export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"

没有这个文件就新建一个,记得加执行权限:

chmod +x /opt/tomcat/bin/setenv.sh

✅ 3. 系统环境变量影响 JVM

有些 Ubuntu 环境中:

echo $TZ

如果有问题,可以取消:

unset TZ

或者在 Tomcat 启动前明确指定:

export TZ=Asia/Shanghai

三、Tomcat 自身日志时间为什么还是不对?

1️⃣ logging.properties 里的时间格式

Tomcat 默认用的是 java.util.logging,时间来自 JVM。

如果你用了 log4j / logback,那看配置:

logback 示例

<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>

确保没有写:

%d{yyyy-MM-dd HH:mm:ss, UTC}

2️⃣ Docker / 云服务器特别容易踩坑

如果你是在 Docker 里跑 Tomcat:

docker run -e TZ=Asia/Shanghai ...

或在 Dockerfile:

ENV TZ=Asia/Shanghai

四、快速自检清单 ✅

检查项 命令
系统时间 date
系统时区 timedatectl
JVM 时区 java -XshowSettings:all -version
Tomcat 日志 tail -f logs/catalina.out

五、总结一句话

Tomcat 日志时间 ≠ 系统时间,而是 JVM 时区决定的。
解决方式:给 Tomcat 的 JVM 加上 -Duser.timezone=Asia/Shanghai


如果你愿意,可以把下面信息贴出来,我可以直接帮你定位:

  • Ubuntu 版本
  • Tomcat 版本
  • date 输出
  • java -version
  • 用的是 log4j / logback / 默认 logging

我可以帮你精确到“一行改哪个文件”。

0