Tomcat的日志文件默认存储在$CATALINA_HOME/logs目录下($CATALINA_HOME为Tomcat安装目录),常见日志文件及作用:
使用tail -f命令实时查看日志文件的最新内容,便于快速定位正在发生的异常:
tail -f /opt/tomcat/logs/catalina.out
若需同时监控多个日志文件(如catalina.out和localhost.log),可使用:
tail -f /opt/tomcat/logs/catalina.out /opt/tomcat/logs/localhost.log
按Ctrl+C停止监控。
grep筛选包含“ERROR”“WARN”或特定业务关键词(如“NullPointerException”)的日志行,快速定位问题:grep "ERROR" /opt/tomcat/logs/catalina.out # 筛选ERROR日志
grep "NullPointerException" /opt/tomcat/logs/catalina.out # 筛选空指针异常
grep -E(或egrep)处理复杂模式,如筛选HTTP 5xx状态码(服务器错误):grep -E " 5[0-9]{2} " /opt/tomcat/logs/access_log.2025-10-07.txt # 匹配5xx状态码
sed提取指定时间范围的日志(如2025-10-07 14:00至15:00):sed -n '/2025-10-07 14:00:00/,/2025-10-07 15:00:00/p' /opt/tomcat/logs/catalina.out
awk提取日志中的关键字段(如时间戳、IP地址、状态码),便于后续分析:awk '{print $1, $2, $4}' /opt/tomcat/logs/access_log.2025-10-07.txt # 提取时间、IP、请求方法
awk + sort + uniq -c + sort -nr组合统计高频IP、状态码或URL:awk '{print $1}' /opt/tomcat/logs/access_log.2025-10-07.txt | sort | uniq -c | sort -nr | head -n 10 # 统计Top 10访问IP
awk '{print $9}' /opt/tomcat/logs/access_log.2025-10-07.txt | sort | uniq -c | sort -nr # 统计状态码分布(如200、404、500)
%D或%T),用awk计算平均值(假设第10列为响应时间,单位为毫秒):awk '$10 ~ /^[0-9]+$/ {sum += $10; count++} END {print "Average response time:", sum/count "ms"}' /opt/tomcat/logs/access_log.2025-10-07.txt
定期轮转日志文件可避免日志过大占用磁盘空间,常用方法:
logrotate工具:编辑/etc/logrotate.d/tomcat文件,添加以下配置(按天轮转,保留7天,压缩旧日志):/opt/tomcat/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 tomcat tomcat
}
手动触发轮转:logrotate -f /etc/logrotate.d/tomcat。mv /opt/tomcat/logs/catalina.out /opt/tomcat/logs/catalina.out.$(date +%Y%m%d%H%M%S)
touch /opt/tomcat/logs/catalina.out
chown tomcat:tomcat /opt/tomcat/logs/catalina.out
chmod 640 /opt/tomcat/logs/catalina.out
find命令删除超过30天的压缩日志文件:find /opt/tomcat/logs/ -name 'catalina.out.*.gz' -type f -mtime +30 -exec rm -f {} \;
对于大规模或复杂的日志分析,可使用以下工具提升效率:
通过修改conf/logging.properties文件调整日志级别和输出,减少无关日志干扰:
org.apache.catalina.level从FINE改为INFO),减少冗余信息:org.apache.catalina.level = INFO
org.apache.catalina.loader.WebappClassLoader.level = WARNING
ConsoleHandler输出日志到控制台(便于开发调试),或调整FileHandler的文件大小和备份数量:handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
1catalina.org.apache.juli.FileHandler.level = INFO
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.maxDays = 7