首页主机资讯Ubuntu Tomcat日志中的异常处理方法

Ubuntu Tomcat日志中的异常处理方法

时间2025-12-04 10:40:07发布访客分类主机资讯浏览764
导读: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.xmlAccessLogValvedirectory/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 = FINE
    • org.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.xmlConnector上设置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.outlocalhost.[日期].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
如何通过Ubuntu Tomcat日志进行负载测试 怎样配置Debian SFTP端口转发

游客 回复需填写必要信息