Ubuntu Tomcat日志中的异常处理方法
导读:Ubuntu Tomcat日志中的异常处理方法 一 定位与查看日志 常见日志路径:安装为服务时通常在**/var/log/tomcatX/(X为版本号),解压安装时通常在$CATALINA_HOME/logs/。主要文件包括:catali...
Ubuntu Tomcat日志中的异常处理方法
一 定位与查看日志
- 常见日志路径:安装为服务时通常在**/var/log/tomcatX/(X为版本号),解压安装时通常在$CATALINA_HOME/logs/。主要文件包括:catalina.out(标准输出/错误)、catalina.[日期].log(按日期的运行时日志)、localhost.[日期].log(应用部署相关)、以及访问日志(由server.xml中AccessLogValve的directory/prefix**决定)。
- 快速查看与分析命令:
- 实时查看:
tail -f $CATALINA_HOME/logs/catalina.out - 过滤错误:
grep -i 'ERROR\|SEVERE' $CATALINA_HOME/logs/catalina.out - 按时间段查看(示例):
sed -n '/2025-12-04 10:00:*/,/2025-12-04 11:00:*/p' $CATALINA_HOME/logs/catalina.out - 统计错误数:
grep -ic 'ERROR' $CATALINA_HOME/logs/catalina.out - 访问日志定位客户端与状态码:
grep ' 500 ' /var/log/tomcat*/localhost_access_log.*.txt
以上路径与命令适用于大多数 Ubuntu 上的 Tomcat 部署与排查场景。
- 实时查看:
二 异常捕获与日志级别
- 调整日志级别以获取更详细的异常堆栈:编辑**$CATALINA_HOME/conf/logging.properties**,将相关 Logger 级别调为FINE/FINER/FINEST,例如:
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINEorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = java.util.logging.ConsoleHandler
修改后需重启 Tomcat 生效。
- 应用侧日志框架:若应用使用Log4j/SLF4J等,可在应用的log4j2.xml/logback.xml中临时将包路径日志级别调为DEBUG/TRACE,以捕获更细的异常上下文。
- 编码与乱码:在logging.properties中设置
java.util.logging.ConsoleHandler.encoding=UTF-8;同时在server.xml的Connector上设置URIEncoding="UTF-8",避免中文与异常信息乱码。 - 日志收集与告警:生产环境建议引入Logstash/Fluentd + Elasticsearch + Kibana(ELK)或Graylog,对“ERROR/SEVERE”“OutOfMemoryError”“500”等做实时检索、聚合与告警。
三 常见异常与处理对照表
| 现象/日志关键词 | 可能原因 | 快速处置 |
|---|---|---|
| 端口占用(如8080) | 其他进程占用端口 | sudo lsof -i :8080 或 `netstat -tulpen |
| ClassNotFoundException / NoClassDefFoundError | 依赖 JAR 缺失或版本冲突 | 将缺失 JAR 放入WEB-INF/lib或**$CATALINA_HOME/lib**;清理工作目录后重部署 |
| OutOfMemoryError | 堆/元空间不足 | 在catalina.sh中增大堆:-Xms512m -Xmx2048m;必要时增加元空间或分析内存泄漏 |
| HTTP 404 | 资源不存在或应用未部署成功 | 检查应用是否部署、上下文路径是否正确、静态资源是否在正确目录 |
| HTTP 500 | 应用代码异常/配置错误 | 查看catalina.out与localhost.[日期].log的堆栈,定位到具体类与方法后修复 |
| 启动失败(LifecycleException 等) | 配置错误(如server.xml)、端口冲突、权限不足 | 回滚最近变更,核对server.xml语法与端口,检查logs/catalina.[日期].log首屏报错 |
| 日志乱码 | 编码不一致 | 设置URIEncoding="UTF-8"与ConsoleHandler.encoding=UTF-8 |
| 访问日志无记录 | AccessLogValve 未启用或路径错误 | 在server.xml中启用并核对directory/prefix |
| 以上对照覆盖了 Ubuntu 上 Tomcat 最常见的问题类型与处置方向,可结合日志关键字快速定位并解决。 |
四 日志轮转与清理
- 使用logrotate管理日志:创建**/etc/logrotate.d/tomcat**,示例:
/opt/tomcat/logs/catalina.out { daily rotate 7 compress missingok notifempty copytruncate }
说明:daily(按日轮转)、rotate 7(保留7份)、compress(压缩)、missingok(缺失不报错)、notifempty(空文件不轮转)、copytruncate(复制后截断,避免重启应用)。
- 谨慎操作:避免直接
rm -f $CATALINA_HOME/logs/*而不通知应用;优先使用copytruncate或先停写再清理。 - 监控磁盘:设置告警,防止日志占满磁盘导致实例异常。
五 一键排查脚本示例
#!/usr/bin/env bash
export CATALINA_HOME=${
CATALINA_HOME:-/opt/tomcat9}
LOG_DIR="$CATALINA_HOME/logs"
echo "=== 最近100行 catalina.out ==="
tail -n 100 "$LOG_DIR/catalina.out"
echo -e "\n=== 今日 ERROR/SEVERE 计数 ==="
grep -Ei 'ERROR|SEVERE' "$LOG_DIR/catalina.out" | grep "$(date +%Y-%m-%d)" | wc -l
echo -e "\n=== 占用 8080 端口的进程 ==="
ss -lntp | grep ':8080' || echo "端口 8080 未被占用"
echo -e "\n=== 最近一次启动失败线索 ==="
grep -n "LifecycleException\|Caused by" "$LOG_DIR/catalina.[0-9]*.log" | tail -5
echo -e "\n=== 访问日志中 5xx 统计 ==="
zgrep -E ' 5[0-9]{
2}
' "$LOG_DIR/localhost_access_log."*.txt 2>
/dev/null | wc -l
将脚本保存为**/usr/local/bin/tomcat-debug.sh**,执行bash /usr/local/bin/tomcat-debug.sh即可快速获取异常排查线索。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Tomcat日志中的异常处理方法
本文地址: https://pptw.com/jishu/763312.html
