2023-05-10
工具运维
0

目录

日志查询
命令
玩法
实时输出日志
非实时查询日志
实战
查询某个'Exception'的行号,然后查询其行号往下10行的日志
查询时间范围内,某个线程的所有日志

对于Java新手来说,日志查询是公司实际开发中必备技能,对于老手来说,怎么更快捷的查询日志定位问题才是关键。我整理了工作中日志查询常用的命令与技巧,以及一些生产日志定位问题的实战经验,欢迎各位小伙伴留言补充命令用法与场景描述。

日志查询

命令

使用的命令无非就是tailcatgrepheadsed等,这些命令都是linux系统自带的,不需要安装。

玩法

在玩之前,先了解以上命令的基础用法,不然直接上手,也是一脸懵。

实时输出日志

shell
# 实时输出日志 tail -f catalina.out # 实时输出日志文件中所有模糊匹配到'Exception'的行 tail -f catalina.out | grep 'Exception' # --line-buffered 是一行的缓冲区,只要这一行的缓冲区满了就会打印出来,添加此命令可用于实时监控日志 tail -f catalina.out | grep --line-buffered 'Exception' # -200f 表示输出最后200行日志内出现过'Exception'的行,且继续实时输出出现过'Exception'的行 tail -200f catalina.out | grep 'Exception'

警告

tail -n +200 catalina.out 从第200行开始输出日志,不会停止,需要手动停止Ctrl+C,除非紧跟grep搜索,要不然日志输出刹不住车啊

非实时查询日志

shell
# -n 200 表示输出最后200行出现'Exception'的行日志,不会实时输出日志 tail -n 200 catalina.out | grep 'Exception' # 输出最后200行日志,且分页显示 tail -n 200 catalina.out | more # 从第200行开始输出日志 tail -n +200 catalina.out # 查询200行以后日志,并查找关键字'Exception' tail -n +200 catalina.out | grep 'Exception' # 显示全部日志信息,从头开始输出 cat catalina.out # 查看日志文件中所有出现过'Exception'信息,-n是带行号输出 cat -n catalina.out | grep 'Exception' # 查看日志中所有出现过'Exception'信息,-n是带行号输出,输出到文件Exception.txt cat -n catalina.out | grep 'Exception' > Exception.txt # 查询日志文件中所有出现过'Exception'信息,且显示前后100行(-A 查询之后的、-B 查询之前的、-C 查询前后的) cat catalina.out | grep 'Exception' -C 100 # 查询200行以后的日志,且只显示10行,也就是查看200到210行之间的日志 cat -n catalina.out | tail -n +200 | head -n 10 # 查询5到10行日志 sed -n '5,10p' catalina.out # 查询日志文件中的前200行日志(与 tail -n 正好相反) head -n 200 catalina.out # 查询日志前200行,出现过'Exception'的行 head -n 200 catalina.out | grep 'Exception' # 查看日志中出现过'Exception'的行数 grep 'Exception' catalina.out | wc -l # 查询日志中出现123或者abc的行 grep -E '123|abc' catalina.out # 查找当前目录下所有扩展名为.log的文件,并找出包含'Exception'的行 find . -name '*.log' | xargs grep 'Exception' # 查询多个日志文件中出现过'Exception'的行 grep 'Exception' 2023-05-10.log 2023-05-09.log

警告

cat catalina.out 查看文件会从头开始输出,不会停止,需要手动停止Ctrl+C,除非紧跟grep搜索,要不然日志输出刹不住车啊

实战

查询某个'Exception'的行号,然后查询其行号往下10行的日志

shell
# 查询所有出现过 'Exception' 的行号 cat -n catalina.out | grep 'Exception' # 根据行号80021查询附近日志,且只显示10行 cat -n catalina.out | tail -n +80021 | head -n 10

查询时间范围内,某个线程的所有日志

shell
# 首先要进行范围时间段内日志查询先查看是否在当前日之内存在,也就是说 11-07 18:29:20 必须在日志中存在这个时间点(如果日期时间已确认,可直接执行sed命令) grep '11-07 18:29:20' catalina.out grep '11-07 18:31:11' catalina.out # 或者根据grep搜索到的日志确认日期行号(查询后确认日期真实存在,比如,确实存在 2023-04-10 17:39:03.883 的日志,可直接执行sed命令) cat -n catalina.out | grep 717892 # 时间范围内的查询,以4-10 17:39:03.883为起点,到4-10 17:39:05所有毫秒的日志 sed -n '/4-10 17:39:03.883/,/4-10 17:39:05.*/p' catalina.out # 时间范围内的查询,以11-07 18:29分为起点,到11-07 18:31分之间的所有日志 sed -n '/11-07 18:29:/,/11-07 18:31:/p' catalina.out | grep 'http-nio-8084-exec-6'

本文作者:柳始恭

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!