1. 定位Tomcat访问日志文件
Tomcat的访问日志默认由AccessLogValve组件生成,主要记录客户端对Web应用的HTTP请求详情。其路径可通过server.xml中的AccessLogValve配置确定:
$CATALINA_HOME/logs/localhost_access_log.YYYY-MM-DD.txt(如localhost_access_log.2025-10-17.txt),其中directory属性指定日志目录(默认logs),prefix指定前缀(默认localhost_access_log),suffix指定后缀(默认.txt,日期格式为YYYY-MM-DD)。directory(如logs/access_logs)或prefix(如myapp_access),则需对应调整路径查找。2. 查看访问日志的常用命令
tail -f命令跟踪日志文件的新增内容,例如:tail -f $CATALINA_HOME/logs/localhost_access_log.2025-10-17.txt
常用选项:-n 100(显示最后100行)、-q(不显示处理信息)。grep筛选关键字(如错误状态码500、特定URL/api),例如:grep " 500 " $CATALINA_HOME/logs/localhost_access_log.2025-10-17.txt # 查找500错误
grep "/api" $CATALINA_HOME/logs/localhost_access_log.2025-10-17.txt # 查找/api路径的请求
sed截取指定时间范围的日志(如2025-10-17 14:00至15:00),例如:sed -n '/17/Oct/2025:14:00:00/,/17/Oct/2025:15:00:00/p' $CATALINA_HOME/logs/localhost_access_log.2025-10-17.txt > /tmp/filtered_logs.txt
less分页查看(支持上下翻页、搜索),例如:less $CATALINA_HOME/logs/localhost_access_log.2025-10-17.txt
3. 解析访问日志的字段含义
Tomcat访问日志的字段由pattern属性定义,默认使用common(基础信息)或combined(包含Referer、User-Agent)格式。常见字段及含义如下:
%h:远程主机IP(若resolveHosts="false")或主机名(若resolveHosts="true");%t:访问时间(格式:[dd/MMM/yyyy:HH:mm:ss Z],如17/Oct/2025:14:30:00 +0800);%r:HTTP请求行(如GET /index.html HTTP/1.1);%s:HTTP响应状态码(如200成功、404未找到、500服务器错误);%b:发送字节数(不包括HTTP头,0则显示-);%D:处理请求耗时(毫秒,如123表示123ms);%{Referer}i:Referer头(请求来源页面,如https://example.com/page);%{User-Agent}i:User-Agent头(客户端浏览器/设备信息,如Chrome/120.0.0.0)。示例日志(默认common格式):
192.168.1.100 - - [17/Oct/2025:14:30:00 +0800] "GET /index.html HTTP/1.1" 200 2326
解析:IP192.168.1.100在14:30:00发起GET /index.html请求,返回200状态码,发送2326字节。
4. 常用的日志分析场景与命令
awk '{print $1}' $CATALINA_HOME/logs/localhost_access_log.2025-10-17.txt | sort | uniq -c | wc -l
awk '{print $1}' $CATALINA_HOME/logs/localhost_access_log.2025-10-17.txt | sort | uniq -c | sort -nr | head -n 10
awk '{print $9}' $CATALINA_HOME/logs/localhost_access_log.2025-10-17.txt | sort | uniq -c | sort -nr
%D字段(毫秒),计算平均值:awk '{sum+=$NF; count++} END {print "Average response time:", sum/count, "ms"}' $CATALINA_HOME/logs/localhost_access_log.2025-10-17.txt
(注:$NF表示最后一列,若%D不是最后一列,需替换为具体字段序号,如$10)5. 使用专业工具进行深度分析
若需更直观的趋势图表、多维度关联分析(如IP与状态码、URL的关系),可使用以下工具:
file input插件),解析字段(使用grok过滤器匹配pattern);props.conf配置Tomcat日志的字段提取,使用搜索语言(SPL)查询(如source="localhost_access_log*" status=500 | stats count by clientip)。6. 日志轮替与管理
Tomcat默认使用logrotate(Linux系统自带工具)每日自动切割日志,避免单个日志文件过大。切割后的日志文件命名格式为localhost_access_log.YYYY-MM-DD.txt,可通过ls -l $CATALINA_HOME/logs/查看历史日志。
logrotate命令(如logrotate -f /etc/logrotate.d/tomcat)。logrotate的maxage参数(如maxage 30)自动删除30天前的日志,或手动删除:find $CATALINA_HOME/logs/ -name "localhost_access_log.*.txt" -mtime +30 -delete