1. 定位Tomcat日志文件
Tomcat的日志文件集中存储在<TOMCAT_HOME>/logs目录(Linux/Windows均适用),核心日志文件及作用如下:
2. 快速筛选关键错误信息
使用命令行工具快速定位日志中的异常内容:
tail -f /path/to/tomcat/logs/catalina.out(Linux)或type logs\catalina.out(Windows),实时监控新增日志;grep -i "ERROR" /path/to/tomcat/logs/catalina.out(Linux)或findstr /i "ERROR" logs\catalina.out(Windows),提取包含“ERROR”“SEVERE”“Exception”的日志条目;sed -n '/2025-10-15 14:00:00/,/2025-10-15 14:10:00/p' catalina.out(Linux)或findstr /r "2025-10-15 14:[0-9][0-9]:[0-9][0-9]" catalina.out(Windows),提取特定时间段的日志。3. 分析错误堆栈跟踪
当日志中出现异常(如java.lang.NullPointerException、java.sql.SQLException)时,重点查看堆栈跟踪(Stack Trace)——它展示了异常从发生到传播的完整调用链。例如:
SEVERE: Servlet.service() for servlet [jsp] in context with path [/myapp] threw exception [java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at com.example.MyServlet.doGet(MyServlet.java:25)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
...
通过堆栈跟踪可快速定位问题代码位置(如MyServlet.java第25行),结合业务逻辑分析异常原因(如未初始化的对象、空指针引用)。
4. 关联访问日志与业务场景
访问日志(localhost_access_log.<日期>.txt)记录了每个HTTP请求的详细信息,通过分析可定位请求层面的问题:
404(请求资源不存在)、500(服务器内部错误)、503(服务不可用),统计出现次数及对应URL;%D(响应时间,单位毫秒)字段,定位响应时间过长的请求(如超过2秒的GET /api/data请求);/checkout接口频繁出现500错误,需结合应用日志(如localhost.<日期>.log)查看该接口的异常详情(如数据库连接失败、支付接口超时)。5. 排查内存与线程问题
java.lang.OutOfMemoryError: Java heap space(堆内存溢出)、java.lang.OutOfMemoryError: Metaspace(元空间溢出),需:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof;jmap工具手动生成堆转储:jmap -dump:format=b,file=/path/to/dump.hprof <Tomcat_PID>;jstack <Tomcat_PID> > thread_dump.txt生成线程转储,分析:BLOCKED状态的线程,分析阻塞原因(如同步块过长、数据库锁竞争)。6. 调整日志级别细化排查
若默认日志级别(INFO)无法满足需求,可通过修改conf/logging.properties文件调整日志级别(如DEBUG),获取更详细的日志信息:
# 将特定包的日志级别调整为DEBUG(如Spring框架)
org.springframework.level = DEBUG
# 将Tomcat容器的日志级别调整为DEBUG
org.apache.catalina.level = DEBUG
调整后重启Tomcat,获取更详细的日志(如Spring Bean初始化过程、Tomcat请求处理细节),帮助定位深层问题。
7. 使用日志分析工具提升效率
对于大型应用或海量日志,手动分析效率低下,可使用以下工具:
grep过滤错误、awk统计错误次数、sort排序,例如:grep "ERROR" catalina.out | awk '{print $6}' | sort | uniq -c | sort -nr(统计每种错误类型的出现次数)。