当前位置: 首页 > java >正文

线上日志排查问题

1、查异常堆栈

显示该行及其后面的50行内容,然后通过 less 命令进行分页查看

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

参数解释:

  • grep: 文本搜索命令
  • -A 50: After 的意思,显示匹配行后面的50行
  • “NullPointerException”: 要搜索的文本模式(Java空指针异常)
  • a.log: 目标日志文件
  • |: 管道符,将前一个命令的输出传递给后一个命令
  • less: 分页查看器,用于逐页浏览长文本

A的参数还可以替换为以下参数:

  • -B 50:Before的意思,显示匹配行前面的50行
  • -C 50:Context的意思,显示匹配行前后的50行(对称显示)

2、实时监控新日志

实时监控日志文件,当出现 “NullPointerException” 时,显示该异常及其后面的50行内容。

tail -f a.log | grep --line-buffered "NullPointerException"

参数解释:

  • tail -f: 实时跟踪文件的新增内容
  • a.log: 目标日志文件
  • –line-buffered:仅显示匹配的行

3、翻历史/压缩日志

快速定位多个日志文件中的空指针异常,并查看完整的错误堆栈信

grep -H -A 50 "NullPointerException" *.log

参数解释:

  • -H: 显示文件名(即使只搜索一个文件)
  • *.log: 匹配所有以 .log 结尾的文件
zgrep -H -A 50 "NullPointerException" *.gz

参数解释:

  • zgrep: 专门用于搜索压缩文件的grep命令
  • *.gz: 匹配所有以 .gz 结尾的压缩文件

4、统计异常数量

统计每个 .log 文件中包含 “NullPointerEWxception” 的行数

grep -c "NullPointerEWxception" *.log

-c: count 的意思,统计匹配行的数量

5、多种异常一起查

使用正则表达式在日志文件中同时搜索两种异常。

grep -E "NullPointerException|TimeoutException|IOException|SQLException" a.log

参数解释:

  • -E: 使用扩展正则表达式(Extended Regular Expressions),启用扩展正则表达式,使得 | 被解释为或操作符,而不是普通字符
  • “NullPointerException|TimeoutException|IOException|SQLException”: 匹配包含 “NullPointerException” 或者 “TimeoutException” 或者”IOException“或者”SQLException“的行

6、反向过滤(排除无关)

查找空指针异常并过滤掉调试信息

grep "NullPointerException" a.log -A 20 | grep -v "debug"

参数解释:

  • grep -v:反向匹配,显示不包含指定模式的行

7、按时间范围筛选日志

查询出2025-08-21 10点到11点之间出现的空指针异常

awk '/2025-08-21 10:/,/2025-08-21 12:/' a.log | grep "NullPointerException"

参数解释:

  • awk: 文本处理工具
  • /2025-08-21 10:/,/2025-08-21 12:/:范围模式(提取这两个时间点之间的所有行)
    • 起始模式:包含 “2025-08-21 10:” 的行
    • 结束模式:包含 “2025-08-21 12:” 的行

8、关键字AND查询

查找同时包含 “Exception” 和 “UserService” 的行

grep "Exception" a.log | grep "UserService"

9、定位最近一次异常

从日志文件的末尾开始搜索,找到最后一个 “NullPointerException” 并显示它及其后面的50行内容

tac a.log | grep -m 1 "NullPointerException" -A 50

参数说明:

  • tac: 反向显示文件内容(cat的反向命令),从文件的最后一行开始,逐行向上显示,相当于把文件内容完全颠倒顺序
  • |:管道,将反向排列的日志内容传递给 grep
  • -m 1: 最多匹配1次,找到第一个匹配就停止

10、异常排行

用于统计日志中各种异常的出现次数并按频率排序

grep "Exception" a.log | sort | uniq -c | sort -nr | head

参数说明:

  • grep “Exception” a.log:从 a.log 中筛选出包含 “Exception” 的所有行
  • sort:对异常行进行排序(按字母顺序)
  • uniq -c:合并相同的异常行并显示计数
  • sort -nr:按出现次数从高到低排序
    • n: 按数字排序
    • r: 反向排序(降序)
  • head:显示前10行(默认)
http://www.xdnf.cn/news/18523.html

相关文章:

  • MCP 与 Function Calling 打开真实世界的两种“母体”方式
  • Spring 框架深度解析:从核心原理到实战应用
  • GitLab CI :深入剖析 gl-sbom-report.cdx.json 解码“数字身份证”
  • linux下的网络编程
  • 快速入门Vue3——初体验
  • 6020角度双环控制一种用于电机控制的策略
  • 智能合约漏洞检测技术综述:守护区块链世界的“自动售货机”
  • 在通义灵码中配置MCP服务
  • uniapp使用map打包app后自定义气泡不显示解决方法customCallout
  • JavaWeb前端05(Vue工程化,Vue组件两种风格:组合式API 和 选项式API)及简单案例)
  • 豆包 + 蘑兔,破解写歌难题!
  • 知识蒸馏 Knowledge Distillation 论文 Generalized Knowledge Distillation (GKD) 目标函数的演化
  • 【Cmake】Cmake概览
  • 使用GMail API 发送邮箱
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯|21th Aug. , 2025
  • 前端github-workflows部署腾讯云轻量服务器
  • 实用R语言机器学习指南:从数据预处理到模型实战(附配套学习资源)
  • docker 查看容器 docker 筛选容器
  • 循环神经网络实战:GRU 对比 LSTM 的中文情感分析(三)
  • Flask数据库迁移实战指南
  • LeetCode100-76最小覆盖子串
  • 数据库备份sql文件过大,phpAdmin无法执行Sql
  • Python递归下降解析器深度解析:从原理到工程实践
  • 异常值检测:孤立森林模型(IsolationForest)总结
  • Flowise 任意文件上传漏洞 含Flowise Docker安装、漏洞复现(CVE-2025-26319)
  • 如何使用 DeepSeek 助力工作:全面指南​
  • AWS OpenSearch 是什么
  • ROS2下YOLO+Moveit+PCL机械臂自主避障抓取方案
  • 如何理解AP服务发现协议中“如果某项服务需要被配置为可通过多个不同的网络接口进行访问,则应为每个网络接口使用一个独立的客户端服务实例”?
  • Unreal Engine APawn 与 ACharacter 比较