Tomcat的日志文件默认存储在$CATALINA_HOME/logs目录下($CATALINA_HOME为Tomcat安装目录),常见日志文件及作用如下:
server.xml中启用),包含请求URL、响应状态码等信息。使用tail -f命令实时查看日志文件的更新,快速捕捉最近的错误或异常:
tail -f $CATALINA_HOME/logs/catalina.out
该命令会持续输出catalina.out文件的最后几行,当有新日志写入时自动刷新,适合排查正在发生的故障(如服务突然崩溃、请求超时)。
通过grep命令筛选出包含关键字的日志行,缩小问题范围:
grep -i "error" $CATALINA_HOME/logs/catalina.out # 查找所有ERROR级别的日志(不区分大小写)
grep -i "exception" $CATALINA_HOME/logs/catalina.out # 查找异常堆栈信息
grep -i "outofmemoryerror" $CATALINA_HOME/logs/catalina.out # 查找内存溢出错误
-i参数表示忽略大小写,可根据具体问题替换关键字(如severe、failed、timeout)。
通过日志中的关键字快速识别问题根源,并采取对应措施:
内存溢出(OutOfMemoryError):
日志特征:java.lang.OutOfMemoryError: Java heap space(堆内存不足)或PermGen space(永久代内存不足)。
解决方法:调整JVM内存参数,在$CATALINA_HOME/bin/catalina.sh中增加:
JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"
(-Xms为初始堆大小,-Xmx为最大堆大小,根据服务器配置调整)。
端口冲突:
日志特征:SEVERE: Failed to initialize connector [Connector[HTTP/1.1-8080]] + java.net.BindException: Address already in use。
解决方法:使用netstat命令查找占用端口的进程,终止该进程或修改Tomcat端口:
netstat -tuln | grep 8080 # 查找占用8080端口的进程
lsof -i :8080 # 查看进程ID
kill -9 <PID> # 终止进程
或修改$CATALINA_HOME/conf/server.xml中的<Connector>端口(如将8080改为8081)。。
类加载失败(ClassNotFoundException/NoClassDefFoundError):
日志特征:java.lang.ClassNotFoundException: com.example.HelloServlet或NoClassDefFoundError。
解决方法:检查WEB应用的WEB-INF/classes目录是否存在对应的.class文件,或WEB-INF/lib目录是否包含所需依赖的JAR包;验证web.xml中servlet-class配置的正确性。。
配置文件错误:
日志特征:SEVERE: Parse error in application web.xml file或org.xml.sax.SAXParseException。
解决方法:检查conf/server.xml、webapps/<应用名>/WEB-INF/web.xml等配置文件的语法(如标签闭合、属性值格式),可使用XML验证工具辅助检查。。
对于大型或复杂的日志文件,手动分析效率低下,可使用以下工具:
/etc/logrotate.d/tomcat文件,配置轮转策略(如每天轮转1次,保留7天):/usr/local/tomcat/logs/catalina.out {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
```。
若日志信息过多干扰排查,可通过修改logging.properties文件调整日志级别,减少无关日志输出:
# 打开$CATALINA_HOME/conf/logging.properties文件
vi $CATALINA_HOME/conf/logging.properties
将需要关注的logger级别调整为WARNING或ERROR(级别从低到高:FINEST→FINER→FINE→CONFIG→INFO→WARNING→SEVERE):
org.apache.catalina.level = WARNING # 降低Tomcat核心组件的日志级别
com.example.myapp.level = ERROR # 将特定应用的日志级别设为ERROR
修改后重启Tomcat使配置生效:
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
```。