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

SpringBoot怎么查看服务端的日志

一、查异常堆栈:别只看一行!

Java异常堆栈都是“连续剧”,光看第一行根本找不到病根。比如你之前看到的:

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

只能拿到最上面那一行,下面几十行的堆栈信息全被吃掉了。这时候得用grep -A(A是After的缩写):

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

-A 50会把匹配行后面50行全拽出来,这样就能看到完整的异常堆栈了!比如输出会像这样:

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  
at com.example.service.UserService.getUser(UserService.java:42)  
at com.example.controller.UserController.getUser(UserController.java:28)  
...(后面还有几十行堆栈)

要是日志刷屏太快,还可以用less分页查看:

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

less里按G直接跳到末尾看最新日志,按/Exception继续搜索,按q退出——比你用vi翻半天快10倍!

二、实时监控:让异常自己蹦出来

要是你怀疑应用会随时报错,想实时蹲守,可以把tail -fgrep结合起来:

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

这样只要异常一出现,它就会={red}**自动把堆栈信息打印出来**=,连按回车都省了!比如你刚敲完命令,下一秒日志就会刷出来:

==> a.log <==  
2025-07-03 11:45:23.123 [http-nio-8960-exec-5] [89hJ7k65lEYvTYX8AYti48] [ERROR] [GlobalExceptionHandler] java.lang.NullPointerException, ex: java.lang.NullPointerException  
java.lang.NullPointerException: null  
at com.example.service.OrderService.createOrder(OrderService.java:67)  
...

想停?按Ctrl + C就行。要是怕拼错大小写(比如写成nullpointerexception),可以加-i忽略大小写:

tail -f a.log | grep -i -A 50 "nullpointerexception"
三、翻历史日志:连压缩包都不用解!

服务器日志通常会按天压缩成.gz文件,比如a.log.2025-07-02.gz。这时候直接用grep -H搜所有.log文件:

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

-H会显示文件名,比如输出会是:

a.log:2025-07-03 11:38:48.339 ...  
b.log:2025-07-02 09:15:42.789 ...

要是遇到.gz压缩文件,用zgrep直接穿透搜索:

zgrep -H -A 50 "java.lang.NullPointerException" *.gz

zgrep就像给grep装了透视眼,不用解压就能直接查压缩包里的内容!比如你搜完会看到:

a.log.2025-07-02.gz:2025-07-02 14:23:56.890 ...
四、统计异常次数:看看是不是成灾了

想知道这个异常到底是偶发还是天天蹦跶?用grep -c统计次数:

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

输出就是出现的行数,比如:

12

要是想统计所有日志文件的总数:

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

结果会像这样:

a.log:12  
b.log:3  
total:15

这样就能快速判断是不是代码有重大隐患了!

五、进阶操作:前后文一起看

有时候光看异常还不够,得结合前后日志分析。这时候可以用-B(前面的行)、-C(上下文)参数:

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

-C 25会把匹配行={red}**前后各25行**=都显示出来,比如输出会包含异常前后的业务日志,帮你定位是不是前面某个步骤没处理好。

再比如,想找异常发生前10行的用户操作记录:

grep -B 10 "java.lang.NullPointerException" a.log

这样就能看到用户干了什么导致报错,比你一行行翻日志快多了!

http://www.lryc.cn/news/608127.html

相关文章:

  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博舆情数据可视化分析-热词情感趋势树形图
  • sqli-labs:Less-21关卡详细解析
  • 【BTC】挖矿难度调整
  • 人类学家与建筑师:区分UX研究和项目管理的需求分析
  • 隧道照明“隐形革命”:智能控制如何破解安全与节能双重命题
  • 【iOS】strong和copy工作流程探寻、OC属性关键字复习
  • 电脑手机热点方式通信(下)
  • 「iOS」————weak底层原理
  • 「iOS」————SideTable
  • JAVA国际版同城服务同城信息同城任务发布平台APP源码Android + IOS
  • Ajax——异步前后端交互提升OA系统性能体验
  • Dice Combinations(Dynamic Programming)
  • 8.2 状态机|贪心|dfs_dp
  • Linux初步认识与指令与权限
  • 机器学习——K 折交叉验证(K-Fold Cross Validation),实战案例:寻找逻辑回归最佳惩罚因子C
  • Jotai:React轻量级原子化状态管理,告别重渲染困扰
  • React ahooks——副作用类hooks之useThrottleFn
  • react 和 react native 的开发过程区别
  • Javascript面试题及详细答案150道之(016-030)
  • 【REACT18.x】使用vite创建的项目无法启动,报错TypeError: crypto.hash is not a function解决方法
  • NEXT.js 打包部署到服务器
  • OLTP,OLAP,HTAP是什么,数据库该怎么选
  • React ahooks——副作用类hooks之useThrottleEffect
  • 超平面(Hyperplane)是什么?
  • 深入 Go 底层原理(十四):timer 的实现与高性能定时器
  • 卡尔曼滤波轨迹跟踪算法与MATLAB实现
  • 关于Web前端安全防御XSS攻防的几点考虑
  • 【软考中级网络工程师】知识点之 VRRP
  • 智能学号抽取系统V5.6.4重磅发布
  • 【Docker】RK3576-Debian上使用Docker安装Ubuntu22.04+ROS2