有时候我们需要查看异常发生前的上下文,这时可以使用-B
(Before)参数:
# 查找NullPointerException,并显示前面5行和后面50行
grep -B 5 -A 50 "Java.lang.NullPointerException" a.log
-C
(Context)参数可以同时显示匹配行前后N行内容:
# 显示匹配行前后各10行
grep -C 10 "java.lang.NullPointerException" a.log
# 实时监控并显示异常前后各20行
tail -f a.log | grep -C 20 "java.lang.NullPointerException"
# 查找压缩日志中的异常及前后15行
zgrep -C 15 "java.lang.NullPointerException" *.gz
# 查找11:00到11:30之间的异常
grep -C 10 "java.lang.NullPointerException" a.log | grep "2025-07-03 11:[0-3][0-9]"
# 查找包含NullPointerException但不包含"expected"的日志
grep -A 50 "java.lang.NullPointerException" a.log | grep -v "expected"
参数 | 功能 | 示例 |
---|---|---|
-B N | 显示匹配行前N行 | grep -B 5 "error" log |
-A N | 显示匹配行后N行 | grep -A 50 "exC++eption" log |
-C N | 显示匹配行前后各N行 | grep -C 10 "warning" log |
-v | 反向匹配(排除) | grep -v "debug" log |
-i | 忽略大小写 | grep -i "nullpointer" log |
-H | 显示文件名 | grep -H "error" *.log |
掌握这些技巧后,你将能够更高效地定位日志中的问题,快速获取完整的上下文信息,而不再局限于单行日志的查看。
# 查看匹配行及前5行
grep -B 5 "pattern" file.log
# 查看匹配行及后50行(适合查看异常堆栈)
grep -A 50 "Exception" file.log
# 查看匹配行前后各10行(完整上下文)
grep -C 10 "Error" file.log
# 实时监控日志并显示匹配行及后50行
tail -f application.log | grep -A 50 "NullPointerException"
# 实时监控并高亮显示匹配内容
tail -f application.log | grep --color=auto -C 10 "ERROR"
# 查找包含A但不包含B的日志
grep "ServiceA" app.log | grep -v "DEBUG"
# 同时查找多个关键词(OR条件)
grep -E "Error|Exception|Timeout" system.log
# 查找特定时间段的日志
grep "2025-07-28 14:" app.log | grep -A 30 "Critical"
# 统计错误出现次数
grep -c "NullPointerException" *.log
# 统计每小时错误数量
grep "NullPointerException" app.log | cut -d' ' -f2 | cut -d: -f1 | uniq -c
# 查找最频繁的错误类型
grep -o "Exception: [A-Za-z]*" app.log | sort | uniq -c | sort -nr
# 显示匹配行前后各10行
grep -C 10 "java.lang.NullPointerException" a.log
0
# 显示匹配行前后各10行
grep -C 10 "java.lang.NullPointerException" a.log
1
# 显示匹配行前后各10行
grep -C 10 "java.lang.NullPointerException" a.log
2
# 显示匹配行前后各10行
grep -C 10 "java.lang.NullPointerException" a.log
3
# 显示匹配行前后各10行
grep -C 10 "java.lang.NullPointerException" a.log
4
# 显示匹配行前后各10行
grep -C 10 "java.lang.NullPointerException" a.log
5
-C
参数获取完整上下文通过掌握这些技巧,你可以将日志查询效率提升10倍以上,快速定位各种系统问题。记住,好的日志查询策略应该是:从宽泛到具体,从整体到细节。