Ubuntu Tomcat日志关键指标与优先级
一 日志类型与用途概览
- catalina.out / catalina.[日期].log:记录启动/关闭、JVM 参数、标准输出/错误与未捕获异常,用于判断实例生命周期与致命错误。
- localhost.[日期].log:应用层面的日志输出(如 log4j、jul 等),便于定位业务异常与错误堆栈。
- localhost_access_log.[日期].txt:访问日志,承载PV/UV、状态码分布、响应时间、流量与来源信息,是性能与可用性观测的核心。
- 其他:host-manager.[日期].log / manager.[日期].log(管理应用)、commons-daemon.[日期].log(服务守护进程)、以及按配置的stdout/stderr重定向文件。以上文件通常位于 $CATALINA_HOME/logs(常见为 /var/log/tomcat 或 /opt/tomcat/logs)。
二 访问日志的关键指标与字段
- 基础维度
- 时间 %t:请求发生时间(含时区),用于峰值与时段分析。
- 客户端 IP %h / %a:来源地址;在反向代理/负载均衡后,建议记录 X-Real-IP 或 X-Forwarded-For 以获取真实客户端 IP(如:%{X-Real-IP}i)。
- 请求行 %r:包含方法 + URI + 协议,便于识别异常接口与攻击特征。
- 状态码 %>s:如 200/4xx/5xx,用于可用性与健康度评估。
- 响应体大小 %b / %B:用于吞吐量与流量统计(%b 为 CLF 格式,0 记录为“-”;%B 恒为数字)。
- 性能与诊断
- 处理时间 %D(毫秒)/ %T(秒):定位慢请求与性能瓶颈。
- 线程名 %I:关联线程池与并发压力。
- 会话 ID %S:追踪用户会话相关问题。
- 请求协议 %H、本地端口 %p、查询串 %q、URI 路径 %U:细化到协议/端口/接口/参数维度的分析。
- 建议的增强字段
- %{User-Agent}i、%{Referer}i:识别爬虫/浏览器与来源页面。
- %{Cookie}i / %{JSESSIONID}c:会话与登录态分析。
- 在反向代理后务必记录 X-Real-IP / X-Forwarded-For,否则 %h 可能只是代理 IP。
三 异常与运行日志的关键信号
- 关键词与级别:优先关注 ERROR / SEVERE / WARNING,并阅读异常堆栈定位到类/方法/行号。
- 常见致命信号
- 端口冲突:如 “Address already in use”,需检查端口占用与进程。
- 配置错误:如 “Error parsing configuration class”,核对 server.xml / web.xml 等。
- 依赖缺失:如 NoClassDefFoundError,检查 WEB-INF/lib 与依赖版本。
- 内存不足:启动失败或频繁 Full GC,需调整 -Xms / -Xmx。
- 编码问题:中文乱码,设置 -Dfile.encoding=UTF-8。
- 解读流程:先看异常类型与描述 → 顺着堆栈跟踪定位代码 → 结合**请求上下文(URL/参数/IP)**复现与修复。
四 快速定位与统计的常用命令
- 实时查看与检索
- 实时看控制台输出:
tail -f /var/log/tomcat/catalina.out
- 检索关键字:
grep -i "OutOfMemoryError" /var/log/tomcat/catalina.out
- 访问日志常用统计(示例)
- PV:
cat localhost_access_log.* | wc -l
- UV(按 IP):
cat localhost_access_log.* | awk '{ips[$1]++} END {for(i in ips) print i,ips[i]}'
- 状态码分布:
cat localhost_access_log.* | awk '{status[$9]++} END {for(s in status) print s,status[s]}'
- Top URL:
cat localhost_access_log.* | awk '{urls[$7]++} END {for(u in urls) print u,urls[u]}' | sort -nrk2 | head
- 建议将访问日志接入 ELK/Graylog 或 Prometheus+Grafana,实现可视化与告警。
五 推荐的访问日志配置示例
- 兼顾真实来源 IP、响应时间、UA/Referer 与会话,便于排障与运营分析:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log."
suffix=".txt"
pattern="%h %l %u [%{yyyy-MM-dd HH:mm:ss}t] \"%r\" %>s %b %D %{User-Agent}i %{Referer}i %{JSESSIONID}c %{X-Real-IP}i" />
- 若处于反向代理后,务必记录 X-Real-IP / X-Forwarded-For;如需更细粒度,可补充 %{Cookie}i、%{xxx}r、%{xxx}s 等字段。