温馨提示×

如何过滤tomcat访问日志

小樊
50
2026-09-30 17:13:47
栏目: 智能运维

下面按常见需求给你讲几种“过滤 Tomcat 访问日志”的方法,从最简单到偏运维/开发级别。


一、先确认你用的是哪种访问日志

Tomcat 默认访问日志是 Access Log(不是 catalina.out)。

常见位置:

$TOMCAT_HOME/logs/access_log.xxxx-xx-xx.txt
# 或
localhost_access_log.xxxx-xx-xx.txt

二、用 Linux 命令直接过滤(最常用)

1️⃣ 按 IP 过滤

查看某个 IP 的访问:

grep "192.168.1.100" access_log.2026-01-21.txt

排除某个 IP:

grep -v "127.0.0.1" access_log.2026-01-21.txt

2️⃣ 按 URL / 接口过滤

只看某个接口:

grep "/api/login" access_log.2026-01-21.txt

排除静态资源(css/js/png):

grep -v -E "\.(css|js|png|jpg|gif)$" access_log.2026-01-21.txt

3️⃣ 按 HTTP 状态码过滤

只看 500 错误:

grep " 500 " access_log.2026-01-21.txt

只看 4xx:

grep -E " 4[0-9]{2} " access_log.2026-01-21.txt

4️⃣ 按时间过滤

比如只看重 10 点的:

grep "21/Jan/2026:10:" access_log.2026-01-21.txt

三、用 awk 做“结构化过滤”(推荐)

统计访问最多的 IP

awk '{print $1}' access_log.2026-01-21.txt | sort | uniq -c | sort -nr | head

统计每个接口访问次数

awk '{print $7}' access_log.2026-01-21.txt | sort | uniq -c | sort -nr

四、在 Tomcat 配置层“过滤日志”(不记录某些请求)

如果你不想记录某些访问,可以改 server.xml

示例:不记录静态资源

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="localhost_access_log"
       suffix=".txt"
       pattern="%h %l %u %t "%r" %s %b"
       conditionIf="notStatic" />

或者在 AccessLogValve 中:

  • conditionIf
  • conditionUnless

来控制是否记录。


五、用日志分析工具(生产环境推荐)

  • ELK(Elasticsearch + Logstash + Kibana)
  • Grafana + Loki
  • GoAccess(轻量实时)
goaccess access_log.2026-01-21.txt -o report.html

六、常见需求速查表

需求 命令
某 IP 访问 grep ip log
排除 IP grep -v ip log
某接口 grep /api log
错误请求 grep " 500 " log
统计 IP awk + uniq

如果你能告诉我:

  • ✅ 用的是 Tomcat 几
  • ✅ 想“看日志”还是“不记录某些日志”
  • ✅ 是人工排查还是系统自动过滤

我可以直接给你可复制的配置或脚本。

0 踩