Ubuntu 上 Tomcat 日志异常(不输出、乱码、缺失、爆盘、报错)通常不是单一原因,而是系统、Tomcat 配置、应用代码或权限共同作用的结果。下面按常见原因 → 排查方向给你一个系统性的分析。
| 现象 | 常见原因 |
|---|---|
| 日志不生成 | logs 目录无写权限 |
| 日志突然停止 | 磁盘满 / inode 满 |
| 中文乱码 | 系统编码不一致 |
| 日志巨增 | 应用无限打日志 |
| 日志为空 | 使用了 systemd |
| 日志格式异常 | logging.properties 被改 |
| 启动无日志 | JAVA_HOME / 环境变量错误 |
ls -ld /opt/tomcat/logs
如果 Tomcat 以 tomcat 用户运行:
sudo chown -R tomcat:tomcat /opt/tomcat/logs
sudo chmod 755 /opt/tomcat/logs
⚠️ 不要用 root 直接启 Tomcat 然后换用户
df -h
df -i
排查:
du -sh /opt/tomcat/logs/*
✅ 解决:
Ubuntu 下用 systemctl start tomcat 时:
journalctl查看:
journalctl -u tomcat -f
✅ 解决:
在 systemd service 文件中:
StandardOutput=append:/opt/tomcat/logs/catalina.out
StandardError=append:/opt/tomcat/logs/catalina.out
路径:
/opt/tomcat/conf/logging.properties
常见异常:
推荐最小正常配置:
handlers = 1catalina.org.apache.juli.AsyncFileHandler
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
现象:
检查:
WEB-INF/lib | grep log
✅ 解决:
locale
如果不是:
zh_CN.UTF-8 或 en_US.UTF-8
解决:
sudo locale-gen zh_CN.UTF-8
sudo update-locale
并在 setenv.sh:
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
查看:
grep -i oom /var/log/syslog
Tomcat 启动参数建议:
-Xms512m -Xmx1024m
# 1. 磁盘
df -h && df -i
# 2. 权限
ls -ld /opt/tomcat/logs
# 3. 当前日志
ls -lh /opt/tomcat/logs
# 4. systemd
journalctl -u tomcat -n 100
# 5. 配置
cat /opt/tomcat/conf/logging.properties
你可以直接贴出:
我可以帮你逐行定位到根因,而不是泛泛排查。