1. 定位Tomcat日志文件
Tomcat的日志文件默认存储在<TOMCAT_HOME>/logs目录(Linux/Windows均适用),常见文件及作用如下:
2. 使用命令行工具快速提取关键数据
Linux系统的命令行工具是提取日志数据的便捷方式,适用于实时监控和简单过滤:
tail -f /path/to/tomcat/logs/catalina.out(实时输出日志末尾新增内容,按Ctrl+C退出);grep 'ERROR' /path/to/tomcat/logs/catalina.out(提取包含“ERROR”的行,用于定位严重问题);less /path/to/tomcat/logs/catalina.out(支持上下翻页、搜索关键字,按q退出);sed -n '/2025-10-01 00:00:00/,/2025-10-01 23:59:59/p' /path/to/tomcat/logs/catalina.out(提取指定时间范围内的日志,需替换为实际时间);grep -c 'ERROR' /path/to/tomcat/logs/catalina.out(统计“ERROR”出现的总次数)。3. 编写脚本自动化提取与分析
通过Python/Shell脚本可实现复杂日志解析(如提取结构化数据、统计指标),适用于大规模日志处理:
import re
from collections import defaultdict
LOG_FILE = '/path/to/tomcat/logs/catalina.out'
ERROR_PATTERN = re.compile(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*ERROR.*?(?=\n\S|$)')
WARNING_PATTERN = re.compile(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*WARN.*?(?=\n\S|$)')
ACCESS_PATTERN = re.compile(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*"(GET|POST) ([^ ]+)"')
error_count = 0
warning_count = 0
access_stats = defaultdict(int)
with open(LOG_FILE, 'r') as f:
for line in f:
error_match = ERROR_PATTERN.search(line)
if error_match:
error_count += 1
print(f"[ERROR] {error_match.group(1)}: {error_match.group(0).split('ERROR')[1].strip()}")
warning_match = WARNING_PATTERN.search(line)
if warning_match:
warning_count += 1
print(f"[WARN] {warning_match.group(1)}: {warning_match.group(0).split('WARN')[1].strip()}")
access_match = ACCESS_PATTERN.search(line)
if access_match:
access_stats[access_match.group(3)] += 1 # 统计每个URL的访问次数
print(f"\nTotal Errors: {error_count}")
print(f"Total Warnings: {warning_count}")
print("\nTop Accessed URLs:")
for url, count in sorted(access_stats.items(), key=lambda x: x[1], reverse=True)[:10]:
print(f"{url}: {count} times")
该脚本可提取错误/警告的时间戳和详情,并统计访问日志中每个URL的访问次数,输出Top10热门URL。4. 利用日志分析工具深度挖掘
对于大规模或长期日志,使用专业工具可实现高效存储、分析与可视化:
grok过滤器解析日志格式(如%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}),将日志发送至Elasticsearch;index=tomcat sourcetype=catalina error)和可视化功能,适合企业级日志管理;extractor提取日志中的字段(如IP、状态码)。5. 针对性提取关键信息
根据需求聚焦不同类型的日志数据,提升分析效率:
ERROR和WARN级别的日志,关注异常类型(如NullPointerException、SQLException)和堆栈跟踪(定位代码问题);4xx/5xx错误率)、响应时间(需开启Tomcat的AccessLogValve配置,如%D表示响应时间),识别慢请求;401(未授权)、403(禁止访问)、5xx(服务器错误)等状态码,结合IP地址分析异常访问行为;6. 优化日志配置提升可用性
通过调整Tomcat的logging.properties文件,让日志更易提取和分析:
FINE或INFO(如org.apache.catalina.level=INFO),避免过多DEBUG日志干扰;cronolog工具(Linux)或修改catalina.sh,按日期分割catalina.out(如catalina.out.%Y-%m-%d),防止日志文件过大;server.xml中配置AccessLogValve,添加所需字段(如%{User-Agent}i记录用户代理),例如:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"" />
其中%h(IP)、%r(请求行)、%s(状态码)、%b(响应大小)是常用字段。