做为一名合格的Java后台开发

经常需要查询线上的日志,定位线上问题

所以熟练掌握日志查询的命令

可以使你更加迅速的定位错误日志位置,及时解决问题

在此,我将介绍几个自己工作中经常使用到的日志查询命令

大家一起学习讨论,让我们都能更优雅的操作日志

假设你有一个日志文件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

用于输出文件中的尾部内容,实际应用如下:

// 显示文件倒数2行数据,并实时刷新新日志
tail -2f demo.log // 执行效果如下:
line9 56
line0 78 // 如果你需要停止,按Ctrl+C退出
// 假如查看的日志,实时刷新的日志量非常多的话,慎用!

命令用于连接文件并打印到标准输出设备上

// 显示文件全部内容
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键就会往回一页显示

more demo.log

// 执行结果(文件内容少的话,会直接显示全部,效果跟cat一样):
line1 123456 aa
line2 123456 bb
line3 123456 cc
--More--(15%)

lessmore类似,但使用less可以随意浏览文件(使用键盘上的上下箭头),而且less在查看之前不会加载整个文件

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指令会把含有范本样式的那一列显示出来

// 查询包含关键字`123456`的日志内容
grep "123456" demo.log // 执行结果
line1 123456 aa
line2 123456 bb
line3 123456 cc
line4 123456 dd
// 查询包含关键字`123456`且包含`aa`的日志内容
grep "123456" demo.log | grep "aa" // 执行结果
line1 123456 aa
// 查询不包含`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
// 查询包含关键字`123456`但不包含`aa`的日志内容
grep "123456" demo.log | grep -v "aa" // 执行结果
line2 123456 bb
line3 123456 cc
line4 123456 dd
// 查询包含关键字`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查找关键字,但是还是有非常多匹配的结果时,可以组合前面的lessmore实现分页显示,示例如下:

grep "123456" demo.log | less
grep "123456" demo.log | more grep "123456\|aa" demo.log | less
grep "123456" demo.log | grep -v "aa" | less

通过以上介绍的几个命令,相信应该足够应付大部分的查找日志的场景。

好了,剩下的就是勤加练习了。

当然,如果你有更好的方式可以更加优雅的查询日志,也希望你能与我一起分享


  • 2018-09-05补充:

当使用less命令查看日志时,还可以对关键字进行查找。命令如下:

// 使用斜杠(/)加关键字的形式,向后查找关键字,如查找关键字:123456
/123456 // 使用问号(?)加关键字的形式,向前查找关键字,如查找关键字:line3
?line3 // PS:跳转到后一个关键字快捷键: N; 跳转到前一个关键字:shift + N

关于cat命令,还有一个与之类似但写法相反的命令:tac。写法就是cat反过来写

功能也是相反的,是从后往前显示内容。示例如下:

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

最新文章

  1. 使用Word发表博客
  2. 【转】sudo命令情景分析
  3. jQuery操作checkbox选择
  4. Zookeeper集群和HBase集群
  5. web.py处理文件上传
  6. linux 查看cpu 内存 硬盘 文件夹大小
  7. Labview 中的类
  8. 关于Java中的选择排序法和冒泡排序法
  9. Java组合与继承生成的类中构造函数的执行顺序
  10. php编程提高执行效率技巧
  11. js split函数用法总结
  12. angular1.x 脏检测
  13. Adline网络的LMS算法与梯度下降
  14. Swing-setAlignmentX()用法-入门
  15. Problem B: 一切皆对象
  16. 搞清Image加载事件(onload)、加载状态(complete)后,实现图片的本地预览,并自适应于父元素内(完成)
  17. vs code的快捷方式
  18. 利用openpyxl模块来操作Excel
  19. I/O多路复用详解
  20. 从NetCore报错到MySql安全

热门文章

  1. SQL Server 最小日志记录
  2. C#版免费离线人脸识别——虹软ArcSoft V3.0
  3. PHP sprintf() 函数详解
  4. Swfit 属性与汇编分析inout本质
  5. 开源一个使用python和pyQT实现的产测工具
  6. linux 读取 USB HID鼠标坐标和点击 在 LCD上显示
  7. Spring Boot从入门到精通(九)整合Spring Data JPA应用框架
  8. Spark入门(六)--Spark的combineByKey、sortBykey
  9. Python习题集(三)
  10. KEIL编译出现错误“source file is not valid utf-8”