Linux环境下Tomcat日志分析指南
Tomcat的日志文件默认存储在$CATALINA_HOME/logs目录($CATALINA_HOME为Tomcat安装根目录),常见日志文件及作用如下:
使用tail -f命令实时跟踪日志文件的新增内容(如catalina.out):
tail -f /path/to/tomcat/logs/catalina.out
按Ctrl+C退出实时查看。
使用less(支持上下翻页、搜索)或more(逐页查看)命令:
less /path/to/tomcat/logs/catalina.out
在less中,按/keyword可搜索关键词(如ERROR),按q退出。
grep命令筛选ERROR、SEVERE或WARNING关键字(不区分大小写):grep -i "ERROR" /path/to/tomcat/logs/catalina.out
sed命令提取指定时间范围的日志(需日志中包含时间戳):sed -n '/2025-09-20 10:00:00/,/2025-09-20 11:00:00/p' /path/to/tomcat/logs/catalina.out
awk命令提取日志中的关键字段(如时间戳、状态码):awk '{print $1, $2, $9}' /path/to/tomcat/logs/access_log.2025-09-20.txt
上述命令提取访问日志中的时间戳(第1列)、请求方法(第2列)和响应状态码(第9列)。当日志文件过大时,可使用logrotate工具自动按日期或大小分割日志,避免占用过多磁盘空间。编辑/etc/logrotate.d/tomcat文件,添加以下配置:
/path/to/tomcat/logs/*.log {
daily # 每天分割
missingok # 忽略缺失文件
rotate 7 # 保留最近7份
compress # 压缩旧日志
notifempty # 空日志不分割
create 640 root adm # 创建新日志的权限
}
手动触发分割:
logrotate /etc/logrotate.d/tomcat
grep+sort+uniq组合,统计错误出现的次数(按频率排序):grep -i "ERROR" /path/to/tomcat/logs/catalina.out | awk '{print $1, $2, $3, $4, $5}' | sort | uniq -c | sort -nr
OutOfMemoryError:grep -i "OutOfMemoryError" /path/to/tomcat/logs/catalina.out
awk提取异常堆栈(以at开头的行):grep -A 20 "java.lang.NullPointerException" /path/to/tomcat/logs/catalina.out | grep -B 20 -A 20 "^at "
上述命令提取NullPointerException及其前后20行的堆栈信息。对于大规模日志或需要可视化的场景,推荐使用以下工具:
catalina.out、access_log);ERROR日志超过阈值时发送邮件)。通过修改Tomcat的conf/logging.properties文件,可调整日志级别、格式和输出位置:
org.apache.catalina的级别从INFO改为FINE(记录更详细信息),但会增加日志量:org.apache.catalina.level = FINE
AccessLogValve配置(在server.xml中),调整访问日志的字段(如添加客户端User-Agent):<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b "%{User-Agent}i"" />
上述pattern中,%{User-Agent}i表示记录客户端浏览器信息。ERROR日志定位应用崩溃、数据库连接失败等问题;pattern中添加%D,记录请求处理时间)、吞吐量(每秒请求数);