同事查日志太慢,我现场教他一套 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掉。 
相关推荐
计算机毕设指导61 分钟前
基于微信小程序的校园二手交易系统【源码文末联系】
java·spring boot·spring·微信小程序·小程序·tomcat·maven
BD_Marathon2 分钟前
设计模式——迪米特法则
java·设计模式·迪米特法则
为什么不问问神奇的海螺呢丶2 分钟前
n9e categraf k8s监控配置 -kube-state-metrics
java·容器·kubernetes
时艰.2 分钟前
Java 线程池 — ThreadPoolExecutor
java·开发语言·python
Coder_Boy_3 分钟前
企业级项目高并发监控场景-Spring Boot 集成 Graphite & InfluxDB 实战文档
java·spring boot·后端·系统架构
lang201509288 分钟前
Java EE并发工具:JSR 236详解
java·java-ee
毕设源码-朱学姐9 小时前
【开题答辩全过程】以 基于JavaWeb的网上家具商城设计与实现为例,包含答辩的问题和答案
java
C雨后彩虹10 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
ujainu11 小时前
Flutter + OpenHarmony 游戏开发进阶:主菜单架构与历史最高分持久化
flutter·游戏·架构·openharmony
java1234_小锋11 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试