做为一名合格的Java后台开发
经常需要查询线上的日志,定位线上问题
所以熟练掌握日志查询的命令
可以使你更加迅速的定位错误日志位置,及时解决问题
在此,我将介绍几个自己工作中经常使用到的日志查询命令
大家一起学习讨论,让我们都能更优雅的操作日志
假设你有一个日志文件demo.log
,里面的内容如下所示,
我们将使用这个文件,来演示如何优雅的查询日志文件、定位文件内容。
1 2 3 4 5 6 7 8 9 10
| line1 123456 aa line2 123456 bb line3 123456 cc line4 123456 dd line5 654321 aa line6 654321 bb line7 12 line8 34 line9 56 line0 78
|
用于输出文件中的尾部内容,实际应用如下:
1 2 3 4 5 6 7 8 9
| // 显示文件倒数2行数据,并实时刷新新日志 tail -2f demo.log
// 执行效果如下: line9 56 line0 78
// 如果你需要停止,按Ctrl+C退出 // 假如查看的日志,实时刷新的日志量非常多的话,慎用!
|
命令用于连接文件并打印到标准输出设备上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| // 显示文件全部内容 cat demo.log
// 执行结果: line1 123456 aa line2 123456 bb line3 123456 cc line4 123456 dd line5 654321 aa line6 654321 bb line7 12 line8 34 line9 56 line0 78
// 由于会显示整个文件的内容,所以如果文件大的话,慎用!
|
类似cat
,不过会以一页一页的形式显示,按空白键space
就往下一页显示,按b
键就会往回一页显示
1 2 3 4 5 6 7
| more demo.log
// 执行结果(文件内容少的话,会直接显示全部,效果跟cat一样): line1 123456 aa line2 123456 bb line3 123456 cc --More--(15%)
|
less
与more
类似,但使用less
可以随意浏览文件(使用键盘上的上下箭头),而且less
在查看之前不会加载整个文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| less demo.log
// 执行结果(文件内容少的话,会直接显示全部,效果如下): line1 123456 aa line2 123456 bb line3 123456 cc line4 123456 dd line5 654321 aa line6 654321 bb line7 12 line8 34 line9 56 line0 78 demo.log (END)
|
grep
指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,grep
指令会把含有范本样式的那一列显示出来
1 2 3 4 5 6 7 8
| // 查询包含关键字`123456`的日志内容 grep "123456" demo.log
// 执行结果 line1 123456 aa line2 123456 bb line3 123456 cc line4 123456 dd
|
1 2 3 4 5
| // 查询包含关键字`123456`且包含`aa`的日志内容 grep "123456" demo.log | grep "aa"
// 执行结果 line1 123456 aa
|
1 2 3 4 5 6 7 8 9 10 11 12
| // 查询不包含`aa`的日志内容 grep -v "aa" demo.log
// 执行结果 line2 123456 bb line3 123456 cc line4 123456 dd line6 654321 bb line7 12 line8 34 line9 56 line0 78
|
1 2 3 4 5 6 7
| // 查询包含关键字`123456`但不包含`aa`的日志内容 grep "123456" demo.log | grep -v "aa"
// 执行结果 line2 123456 bb line3 123456 cc line4 123456 dd
|
1 2 3 4 5 6 7 8 9 10 11
| // 查询包含关键字`123456`或`aa`的日志内容 grep "123456\|aa" demo.log 或者 grep -E "123456|aa" demo.log
// 执行结果 line1 123456 aa line2 123456 bb line3 123456 cc line4 123456 dd line5 654321 aa
|
当你通过grep
查找关键字,但是还是有非常多匹配的结果时,可以组合前面的less
或more
实现分页显示,示例如下:
1 2 3 4 5
| grep "123456" demo.log | less grep "123456" demo.log | more
grep "123456\|aa" demo.log | less grep "123456" demo.log | grep -v "aa" | less
|
通过以上介绍的几个命令,相信应该足够应付大部分的查找日志的场景。
好了,剩下的就是勤加练习了。
当然,如果你有更好的方式可以更加优雅的查询日志,也希望你能与我一起分享
当使用less
命令查看日志时,还可以对关键字进行查找。命令如下:
1 2 3 4 5 6 7
| // 使用斜杠(/)加关键字的形式,向后查找关键字,如查找关键字:123456 /123456
// 使用问号(?)加关键字的形式,向前查找关键字,如查找关键字:line3 ?line3
// PS:跳转到后一个关键字快捷键: N; 跳转到前一个关键字:shift + N
|
关于cat
命令,还有一个与之类似但写法相反的命令:tac
。写法就是cat
反过来写
功能也是相反的,是从后往前显示内容。示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| tac demo.log
// 执行结果: line0 78 line9 56 line8 34 line7 12 line6 654321 bb line5 654321 aa line4 123456 dd line3 123456 cc line2 123456 bb line1 123456 aa
|