同事查日志太慢,我现场教他一套 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掉。 
相关推荐
okra-8 小时前
文件测试测试用例
java·服务器·eclipse
文心快码BaiduComate8 小时前
一人即团队,SubAgent引爆开发者新范式
前端·后端·程序员
努力也学不会java8 小时前
【Java并发】深入解析ConcurrentHashMap
java·juc·hash table
掘金一周9 小时前
2025年还有前端不会Nodejs ?| 掘金一周 9.25
android·前端·后端
RoyLin9 小时前
前端·后端·node.js
泉城老铁9 小时前
springboot常用的注解需要了解,开发必备
spring boot·后端
qq_316837759 小时前
spring cloud 同一服务多实例 websocket跨实例无法共享Session 的解决
java·websocket·spring cloud
草莓熊Lotso9 小时前
《算法闯关指南:优选算法--滑动窗口》--14找到字符串中所有字母异位词
java·linux·开发语言·c++·算法·java-ee
青云交9 小时前
Java 大视界 -- 基于 Java 的大数据实时流处理在金融高频交易数据分析中的应用
java·大数据·量化交易·异常检测·apache flink·实时流处理·金融高频交易
hhhhhshiyishi9 小时前
WLB公司内推|招联金融2026届校招|18薪
java·算法·机器学习·金融·求职招聘