温馨提示×

怎样过滤apache日志内容

小樊
35
2026-09-27 18:19:20
栏目: 编程语言

过滤 Apache 日志内容通常有几种常见场景和做法,下面按用途给你一个实用清单。


一、用命令行过滤(最常用)

1. 按 IP 过滤

查看某个 IP 的访问记录:

grep "192.168.1.100" access_log

排除某个 IP:

grep -v "192.168.1.100" access_log

2. 按 URL / 路径过滤

只看访问 /api/ 的请求:

grep "GET /api/" access_log

排除静态资源(图片、css、js):

grep -v -E "\.(jpg|png|css|js|ico)$" access_log

3. 按 HTTP 状态码过滤

只看 404:

awk '$9 == 404' access_log

看 500 错误:

grep " 500 " access_log

4. 按时间过滤

Apache 默认日志时间格式如:

[10/Oct/2024:13:22:11 +0800]

查看某时间段:

awk -F'[' '$2 >= "10/Oct/2024:13:00:00" && $2 < "10/Oct/2024:14:00:00"' access_log

二、在 Apache 配置中过滤(写入前就排除)

1. 不记录某些请求(日志级别控制)

SetEnvIf Request_URI "\.(gif|jpg|png|css|js)$" static
CustomLog logs/access_log combined env=!static

2. 不记录特定 IP

SetEnvIf Remote_Addr "192.168.1.100" dontlog
CustomLog logs/access_log combined env=!dontlog

三、用日志分析工具过滤

  • GoAccess(实时可视化)
goaccess access_log -o report.html
  • awk / sed(复杂统计) 例如统计访问最多的 IP:
awk '{print $1}' access_log | sort | uniq -c | sort -nr | head

四、常见日志格式参考

默认 combined 格式:

IP - - [时间] "请求" 状态码 大小 "Referer" "User-Agent"

如果你能告诉我:

  • 是 查看已有日志 还是 配置不记录
  • 想过滤的是 IP / URL / 状态码 / 爬虫

我可以直接给你一条最合适的命令或配置。

0 踩