对于Java新手来说,日志查询是公司实际开发中必备技能,对于老手来说,怎么更快捷的查询日志定位问题才是关键。我整理了工作中日志查询常用的命令与技巧,以及一些生产日志定位问题的实战经验,欢迎各位小伙伴留言补充命令用法与场景描述。
使用的命令无非就是tail、 cat、grep、 head、sed等,这些命令都是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搜索,要不然日志输出刹不住车啊
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 许可协议。转载请注明出处!