服务器查日志太慢,试试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视图中,你可以:

1.使用上下箭头或者Page Up/Down键来上下滚动

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

3.输入/Exception继续搜索

4.按q键推出

场景二:实时看新日志怎么打印

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

使用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-28.gz这种格式,查找这种文件的异常信息怎么办?

1.查找当前目录所有.log文件:

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

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

2.查找.gz文件(压缩日志):

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

zgrep是专门处理.gz的grep,它的功能和grep完全一样,无需手动解压

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

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

复制代码
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 递归搜索目录下所有文件
相关推荐
随性而行36025 分钟前
微信API接口与AI自动化:开发者的实现思路
运维·服务器·开发语言·人工智能·微信·自动化
snow@li2 小时前
Java:Java 服务器(Web 容器 / Servlet 容器)完整工作清单
java·服务器·前端
胖兔纸22 小时前
OpenStack 1.7.2 & Ceph 9.2.1 运维命令
运维·ceph·openstack
JL152 小时前
Agent工程-为什么Agent必须有观测和Tracing
服务器·网络·人工智能·安全
不会C语言的男孩3 小时前
Docker 在嵌入式设备中的常用玩法
运维·docker·容器
神州世通3 小时前
IP Office内置外显卡兼容性说明
服务器·网络·tcp/ip
ylscode3 小时前
CVE-2026-31694 漏洞深度分析:Linux 内核 FUSE 组件存在本地提权风险,普通用户可直取 root 权限
linux·运维·服务器
frank00600713 小时前
Rocky 9.8设置本地yum源
服务器
智脑API平台4 小时前
Codex CLI 怎么用 .env 配置 API Key?本地项目和自动化脚本接入教程
运维·自动化
土星云SaturnCloud4 小时前
边缘计算在储气库调峰智能管控中的应用:架构设计与技术解析
服务器·人工智能·ai·边缘计算