在 Ubuntu/Debian 系统上,Tomcat 日志为空(或不更新)是常见问题,通常不是 Tomcat 没在运行,而是日志路径、权限或 systemd 重定向导致的。下面按最常见原因 → 排查方法 → 解决方案来说明。
如果你是通过:
systemctl start tomcat
启动的,那么:
catalina.out 可能一直是空的原因:
systemd 默认不会写 catalina.out,而是把 stdout/stderr 重定向到 journal。
✅ 查看方式:
journalctl -u tomcat
# 或
journalctl -u tomcat -f
Tomcat 进程用户(如 tomcat)没有写权限
检查权限:
ls -ld /var/log/tomcat*
ls -l /var/log/tomcat*/catalina.out
修复示例:
sudo chown -R tomcat:tomcat /var/log/tomcat*
sudo chmod -R 755 /var/log/tomcat*
⚠️ 注意:Ubuntu 的 Tomcat 用户通常是
tomcat,不是root
检查:
/etc/tomcat9/logging.properties
# 或
/opt/tomcat/conf/logging.properties
重点看:
.handlers = 1catalina.org.apache.juli.AsyncFileHandler
如果 catalina.out 被关闭或改为其他 handler,会导致为空。
✅ 典型修复:
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
Ubuntu 官方包路径 ≠ 官方 Tomcat 路径
| 类型 | 日志路径 |
|---|---|
| apt 安装 | /var/log/tomcat9/ |
| 手动安装 | $CATALINA_HOME/logs/ |
确认你的 Tomcat 实际目录:
echo $CATALINA_HOME
ps -ef | grep tomcat
检查:
systemctl status tomcat
# 或
ps -ef | grep java
如果进程马上退出:
一步一步来:
find /var/log /opt /usr/share -name "catalina.out" 2>/dev/null
systemctl status tomcat
如果是:
journalctl -u tomcat -n 100
sudo -u tomcat touch /var/log/tomcat9/test.log
失败说明权限不对。
cd $CATALINA_HOME
./bin/catalina.sh run
如果这时有日志,说明是 systemd 配置问题。
编辑:
sudo systemctl edit tomcat
加入:
[Service]
StandardOutput=append:/var/log/tomcat9/catalina.out
StandardError=append:/var/log/tomcat9/catalina.out
重载:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
接受 systemd 的管理方式,用:
journalctl -u tomcat -f
你可以直接贴出:
systemctl status tomcatls -l /var/log/tomcat*我可以精确告诉你是哪一条原因并给出对应修改命令 ✅