news 2026/1/20 17:29:14

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
同事查日志太慢,我现场教他一套 grep 组合拳!

前言

最近公司来了个新同事,年轻有活力,就是查日志的方式让我有点裂开。

事情是这样的:他写的代码在测试环境报错了,报警信息也被钉钉机器人发到了我们群里。作为资深摸鱼战士,我寻思正好借机摸个鱼顺便指导一下新人,就凑过去看了眼。

结果越看我越急,差点当场喊出:“兄弟你是来写代码的,还是和日志谈恋爱的?”

来看看他是怎么查日志的

他先敲了一句:

tail -f a.log | grep "java.lang.NullPointerException"

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

2025-07-03 11:38:48.339 [http-nio-8960-exec-1] [47gK4n32jEYvTYX8AYti48] [INFO] [GlobalExceptionHandler] java.lang.NullPointerException, ex: java.lang.NullPointerException java.lang.NullPointerException: null

我提醒他:“这样看不到堆栈信息啊。”

他“哦”了一声,灵机一动,用vi把整个文件打开,/NullPointerException搜关键词,一个n一个n地翻……半分钟过去了,异常在哪都没找全,我都快给他跪下了。

于是我当场掏出了一套我压箱底的“查日志组合拳”,一招一式手把手教他。他当场就“悟了”,连连称妙,并表示想让我写成文章好让他发给他前同事看——因为他前同事也是这样查的……

现在,这套组合拳我也分享给你,希望你下次查日志的时候,能让你旁边的同事开开眼。

正式教学

核心的工具其实还是grep命令,下面我将分场景给你讲讲我的实战经验,保证你能直接套用!

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

Java 异常堆栈通常都是多行的,仅仅用grep "NullPointerException"只能看到最上面那一行,问题根源在哪你压根找不到。

这时候使用**grep****-A**(After) 参数来显示匹配行之后的N行。

# 查找 NullPointerException,并显示后面 50 行 grep -A 50 "java.lang.NullPointerException" a.log

如果你发现异常太多,屏幕一闪而过,也可以用less加上分页查看:

grep -A 50 "java.lang.NullPointerException" a.log | less

less视图中,你可以:

  • 使用箭头↑↓Page Up/Down键来上下滚动

  • 输入G直接翻到末尾,方便快速查看最新的日志

  • 输入/Exception继续搜索

  • q键退出

这样你就能第一时间拿到完整异常上下文信息,告别反复vi+/的低效操作!

场景二:实时看新日志怎么打出来的

如果你的应用正在运行,并且你怀疑它会随时抛出异常,你可以实时监控日志文件的增长。

使用tail -f结合grep

# 实时监控 a.log 文件的新增内容,并只显示包含 "java.lang.NullPointerException" 的行及其后50行 tail -f a.log | grep -A 50 "java.lang.NullPointerException"

只要异常一出现,它就会自动打出来,堆栈信息也一并送到你面前!

  • 想停下?Ctrl + C

  • 想更准确?加-i忽略大小写,防止大小写拼错找不到

场景三:翻历史日志 or 查压缩日志

服务器上的日志一般都会按天或按大小分割并压缩,变成.log.2025-07-02.gz这种格式,查找这些文件的异常信息怎么办?

🔍 查找当前目录所有.log文件:
# 在当前目录下查找所有以 .log 结尾的文件,-H 参数可以顺便打印出文件名 grep -H -A 50 "java.lang.NullPointerException" *.log

其中-H会帮你打印出是哪个文件中出现的问题,防止你找完还不知道是哪天的事。

🔍 查找.gz文件(压缩日志):
zgrep -H -A 50 "java.lang.NullPointerException" *.gz

zgrep是专门处理.gzgrep,它的功能和grep完全一样,无需手动解压,直接开整!

场景四:统计异常数量(快速判断异常是否频繁)

有时候你需要知道某个异常到底出现了多少次,是偶发还是成灾,使用grep -c(count):

grep -c "java.lang.NullPointerException" a.log

如果你要统计所有日志里的数量:

grep -c "java.lang.NullPointerException" *.log

其他常用的 grep 参数

参数

作用

-B N

匹配行之前的 N 行(Before)

-A N

匹配行之后的 N 行(After)

-C N

匹配行上下共 N 行(Context)

-i

忽略大小写

-H

显示匹配的文件名

-r

递归搜索目录下所有文件

比如:

grep -C 25 "java.lang.NullPointerException" a.log

这个命令就能让你一眼看到异常前后的上下文,帮助定位代码逻辑是不是哪里先出问题了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/20 19:38:55

Open-AutoGLM推理优化实战(从瓶颈分析到吞吐量提升2.8倍)

第一章:Open-AutoGLM推理优化的背景与挑战随着大语言模型在自然语言处理任务中的广泛应用,高效推理成为实际部署的关键瓶颈。Open-AutoGLM作为开源的自动推理生成语言模型,旨在提升生成质量与推理速度的平衡,但在实际应用中仍面临…

作者头像 李华
网站建设 2026/1/19 18:37:59

[Materials] PEC

这里写目录标题 引言 正文 名称解释 特点 参数 在材料库中和折射率监视器中 PEC 折射率的理解 Author: JiJi \textrm{Author: JiJi} Author: JiJi Created Time: 2025.12.19 \textrm{Created Time: 2025.12.19} Created Time: 2025.12.19

作者头像 李华
网站建设 2026/1/20 19:51:53

测试项目失败原因分析:从根因到破局之路

在软件交付的链条中,测试是质量的最后一道关口。然而,测试项目本身也常面临延期、漏测、价值未能充分体现等诸多挑战,最终导致项目整体受挫。本文将深入剖析测试项目失败的深层原因,并致力于为测试从业者找到一条可行的破局之路。…

作者头像 李华
网站建设 2026/1/19 12:50:41

如何让AI真正“知错能改”?:Open-AutoGLM给出终极答案

第一章:Open-AutoGLM 自主纠错机制原理Open-AutoGLM 是一种基于生成语言模型的自反馈修正框架,其核心在于通过内部一致性验证与外部知识对齐实现输出的动态优化。该机制允许模型在生成响应后主动评估其逻辑完整性、事实准确性以及语法合规性,…

作者头像 李华
网站建设 2026/1/19 5:47:23

Open-AutoGLM离线环境配置避坑指南:99%新手都会忽略的3个细节

第一章:Open-AutoGLM 离线运行技术支撑Open-AutoGLM 作为一款支持本地化部署的自动化语言模型框架,其离线运行能力依赖于多项核心技术的协同支持。为确保在无网络连接或高安全隔离环境下稳定运行,系统在模型压缩、推理引擎优化与本地资源调度…

作者头像 李华
网站建设 2026/1/17 11:53:05

【AI操作自动化突破】:Open-AutoGLM的指令—动作映射黑盒详解

第一章:Open-AutoGLM指令—动作映射的核心机制 Open-AutoGLM 是一种面向自动化任务执行的指令-动作映射框架,旨在将自然语言指令高效转化为可执行的操作序列。其核心在于建立语义理解与系统动作之间的精准映射关系,使得智能体能够理解用户意图…

作者头像 李华