做為一名合格的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%)
less與more類似,但使用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查找關鍵字,但是還是有非常多匹配的結果時,可以組合前面的less或more實現分頁顯示,示例如下:
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
