同事查日志太慢,我现场教他一套 grep 组合拳

沉默是金,总会发光

大家好,我是沉默

前段时间公司来了个新同事,年轻、有活力,就是查日志的方式让我差点当场喊出:"兄弟,你是来写代码的,还是来找日志谈恋爱的?"

**-**01-

发生什么事

事情经过是这样的:

他写的代码在测试环境报错了,钉钉机器人把报警甩到了群里。我心想,这波正好摸鱼+带新人,顺便表现一波。

结果没想到,他先来了一句:

bash 复制代码
tail -f a.log | grep "java.lang.NullPointerException"

想着等下次报错就能立刻抓到。等半天,终于蹦出来一行:

yaml 复制代码
2025-07-03 11:38:48.339 [...] java.lang.NullPointerExceptionjava.lang.NullPointerException: null

我提醒他一句:"兄弟,这样看不到堆栈信息啊。"

他"哦"了一声,然后用 vi 打开整个文件,/NullPointerException 搜关键词,一个 n 一个 n 地翻......

半分钟过去了,异常在哪都没找全。

我人都傻了,当场掏出压箱底的查日志组合拳

教完之后,新人一拍大腿:"妙啊!快写成文章,我发给我前同事看看,他们也是这么翻日志的......"

那既然都这么说了,今天这套查日志秘籍我就公开放送。

- 02-

查日志组合拳

核心武器:grep

灵魂奥义:-A、-B、-C、-H、-i、-c

我直接按场景教你,照着用就行。

场景一:查异常堆栈,绝不能只看一行!

Java 异常堆栈动不动几十行,只用 grep 匹配关键词,你永远只看得到最上面那一行。

正确姿势:

c 复制代码
grep -A 50 "java.lang.NullPointerException" a.log

-A 50 的意思是匹配到的行+后面 50 行,堆栈信息一览无余。

怕刷屏?加 less 分页:

c 复制代码
grep -A 50 "java.lang.NullPointerException" a.log | less

less 里你可以:

  • ↑↓ / PageUp PageDown 滚动
  • G 直达末尾
  • /Exception 继续搜索
  • q 退出

从此告别 vi + / 的痛苦!

场景二:实时看新日志

应用正在跑,随时可能报错?这时候直接 tail 跟进:

bash 复制代码
tail -f a.log | grep -A 50 "java.lang.NullPointerException"

报错一来,堆栈直接推到你面前。

大小写怕拼错?加 -i 忽略大小写。

想停?Ctrl + C

场景三:翻历史日志 & 压缩日志

线上日志常常被分片+压缩,变成 a.log.2025-07-02.gz。这时候别傻傻解压。

查所有 .log 文件:

bash 复制代码
grep -H -A 50 "java.lang.NullPointerException" *.log

.gz 文件:

arduino 复制代码
zgrep -H -A 50 "java.lang.NullPointerException" *.gz

-H 会打印文件名,帮你知道异常在哪一天爆的。

场景四:统计异常数量

你想知道异常是偶发还是疯狂刷屏?

c 复制代码
grep -c "java.lang.NullPointerException" a.log

多文件:

bash 复制代码
grep -c "java.lang.NullPointerException" *.log

很快就能知道是 "今天抽风一次",还是 "系统已经炸锅"。

- 03-

常用 grep 参数对照表

参数 含义
-A N 显示匹配行之后 N 行
-B N 显示匹配行之前 N 行
-C N 显示匹配行上下文 N 行
-H 打印文件名
-i 忽略大小写
-r 递归搜索子目录
-c 统计匹配数量

例子:

c 复制代码
grep -C 25 "java.lang.NullPointerException" a.log

这会把异常上下文都拉出来,一眼就能看出前因后果。

**-****04-**总结

江湖规矩,留一手

这套组合拳,我传给了新同事,现在也传给了你。

如果旁边同事还在 vi + / 地翻日志,

你就可以稳稳站出来说一句:"哥们,这活交给我吧。"

当然啦,江湖规矩,我今天只放了 grep 这一套。

其他更狠的工具(awkwcsed、日志聚合神器 ELK)我还藏着。

想学?点赞+收藏+关注就是报名,下次我写一篇,再传你第二套大招。

复制代码

**-****05-**粉丝福利

r 复制代码
我这里创建一个程序员成长&副业交流群, 


 和一群志同道合的小伙伴,一起聚焦自身发展, 

可以聊:


技术成长与职业规划,分享路线图、面试经验和效率工具, 




探讨多种副业变现路径,从写作课程到私活接单, 




主题活动、打卡挑战和项目组队,让志同道合的伙伴互帮互助、共同进步。 




如果你对这个特别的群,感兴趣的, 
可以加一下, 微信通过后会拉你入群, 
 但是任何人在群里打任何广告,都会被我T掉。 
相关推荐
DashVector4 小时前
如何通过Java SDK获取Doc
大数据·后端·阿里巴巴
前端fighter4 小时前
Express vs Koa vs Egg.js:Node.js 后端框架选型指南
前端·后端·面试
Seven974 小时前
剑指offer-27、字符串的排列
java
编码浪子4 小时前
趣味学RUST基础篇(String)
开发语言·后端·rust
bobz9654 小时前
什么是 ebpf
后端
编码浪子4 小时前
趣味学RUST基础篇(HashMap)
开发语言·后端·rust
SimonKing4 小时前
弃用MinIO,拥抱全新一代分布式文件系统RustFS
java·后端·程序员
AAA修煤气灶刘哥5 小时前
后端人必看!配置中心这玩意儿,用 Nacos 玩明白能少熬 3 个夜
java·后端·spring cloud