Tomcat日志中查找异常记录的方法
Tomcat的日志文件集中存储在$CATALINA_HOME/logs目录($CATALINA_HOME为Tomcat安装根目录),常见日志文件及作用如下:
通过tail -f命令实时输出日志文件的最新内容,便于及时捕获异常:
tail -f $CATALINA_HOME/logs/catalina.out
按Ctrl+C退出实时查看模式。
使用grep命令搜索日志中的异常关键词(如“ERROR”“Exception”“Failed”),快速过滤出异常记录:
# 查找包含"ERROR"的行
grep "ERROR" $CATALINA_HOME/logs/catalina.out
# 查找特定异常(如NullPointerException)
grep "java.lang.NullPointerException" $CATALINA_HOME/logs/catalina.out
若需忽略大小写,可添加-i参数:grep -i "error" catalina.out。
异常堆栈会显示错误发生的具体类、方法和行号,使用grep -A(显示匹配行之后的若干行)、-B(显示匹配行之前的若干行)查看完整堆栈:
# 查找NullPointerException并显示前后2行(包含堆栈信息)
grep -A2 -B2 "java.lang.NullPointerException" $CATALINA_HOME/logs/catalina.out
堆栈跟踪的关键信息是“at”开头的行,从中可定位到异常发生的代码位置。
使用awk命令统计特定异常的出现次数,帮助判断问题的高频性:
awk '/ERROR/ {count++} END {print "ERROR总次数:", count}' $CATALINA_HOME/logs/catalina.out
awk '/java.lang.NullPointerException/ {count++} END {print "NullPointerException次数:", count}' $CATALINA_HOME/logs/catalina.out
若默认日志级别(通常为INFO)未记录足够细节,可通过修改logging.properties文件(位于$CATALINA_HOME/conf)调整日志级别,提升异常信息的详细程度:
# 设置全局日志级别为WARNING(包含ERROR及以上级别)
org.apache.catalina.core.ContainerBase.[Catalina].level = WARNING
# 设置特定包的日志级别为FINE(包含DEBUG细节,用于排查复杂问题)
org.apache.catalina.core.level = FINE
# 确保日志输出到文件和控制台
org.apache.catalina.core.ContainerBase.[Catalina].handlers = 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
修改后需重启Tomcat使配置生效:
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
对于大型系统或海量日志,可使用专业工具提升分析效率:
/etc/logstash/conf.d/tomcat.conf,添加Tomcat日志路径和解析规则);若catalina.out中的异常信息不完整,可结合对应时间的localhost.<日期>.log或应用自定义日志(如WEB-INF/classes/log4j.properties配置的日志文件),获取更详细的业务上下文(如请求参数、数据库操作记录),进一步定位问题根源。