怎么过滤日志内容
过滤日志内容的方法取决于日志格式、过滤目的、使用的工具。下面按常见场景给你一套实用指南,从简单到进阶。
一、按关键词过滤(最常用)
1️⃣ Linux / macOS 命令行
查看包含某关键词的日志
grep "ERROR" app.log
忽略大小写
grep -i "error" app.log
排除某些内容
grep -v "INFO" app.log
同时过滤多个关键词
grep -E "ERROR|WARN" app.log
显示行号
grep -n "ERROR" app.log
二、按时间范围过滤
1️⃣ 日志带时间戳(如 2025-01-20 10:00)
grep "2025-01-20 10:" app.log
2️⃣ 使用 sed 按时间区间
sed -n '/2025-01-20 10:00/,/2025-01-20 11:00/p' app.log
三、按日志级别过滤(INFO / WARN / ERROR)
示例日志
2025-01-20 10:00:01 INFO Starting app
2025-01-20 10:00:02 ERROR Failed to connect
过滤 ERROR
grep " ERROR " app.log
过滤非 ERROR
grep -v " ERROR " app.log
四、结构化日志(JSON)过滤(推荐)
如果日志是 JSON:
{"time":"2025-01-20T10:00:00","level":"ERROR","msg":"db fail"}
使用 jq
jq 'select(.level=="ERROR")' app.log
多条件
jq 'select(.level=="ERROR" and .msg | contains("db"))' app.log
五、实时过滤日志(tail + grep)
tail -f app.log | grep "ERROR"
只显示错误日志,实时更新。
六、按文件大小 / 行数过滤
查看最后 100 行
tail -n 100 app.log
查看前 50 行
head -n 50 app.log
七、日志分析工具(进阶)
| 工具 | 适用场景 |
|---|---|
awk |
按列、复杂条件 |
jq |
JSON 日志 |
| ELK (Elasticsearch + Logstash + Kibana) | 大规模日志 |
| Grafana + Loki | 云原生日志 |
| Splunk | 企业级 |
awk 示例:按列过滤
awk '$3=="ERROR"' app.log
八、常见过滤需求速查
| 需求 | 示例 |
|---|---|
| 只看错误 | grep ERROR app.log |
| 排除心跳日志 | grep -v "heartbeat" app.log |
| 某接口日志 | grep "/api/login" app.log |
| 某用户 | grep "user_id=123" app.log |
| 某 IP | grep "192.168.1.1" app.log |
九、我可以进一步帮你
你可以直接告诉我:
- ✅ 日志是 文本 / JSON / 自定义格式
- ✅ 想过滤 什么内容
- ✅ 用什么环境(Linux / Windows / Docker / K8s)
- ✅ 是否要 实时 / 离线
我可以给你精确命令或脚本。