日志查看技巧之篩選&去重[排查篇]


  引語:相信大家都會偶爾遇到要排查問題發生的原因的情況,那這種時候,我們最有力后盾就是日志文件了,所以謹記日志記錄真的很重要。但是日志文件往往是很大的文件,而且里面有太多的東西可能不是我們需要的,如無數重復行。如果能夠有效篩選出對我們有意義的記錄,那就太方便了!下面,就記錄一些我篩選日志的一些技巧,供自己和部分需要的新手朋友參考!(高能勿噴,歡迎留下你的高見)
  主要使用awk命令進行篩選!

原始日志php_error.log如下:

[21-Nov-2015 11:10:14 UTC] PHP Warning: PHP Startup: in Unknown on line 0
[21-Nov-2015 11:39:48 UTC] PHP Notice: Undefined index: HTTP_RAW_POST_DATA in E:\wamp\www\htdocs\wx_receiver.php on line 39

  重定向輸出相關(這個很重要,因為所有打印出來的,你不可能看得完,導出到其他地方后慢慢分析才是硬道理):

$ echo "hello,world!" > out.log        #直接輸出到
$ echo "hello,world!" >> out.log      #以添加的形式輸出到  
$ echo "ssss!" >> out.log 2>&1       #指定錯誤級別輸出到

  篩選含有warning的記錄:

$ awk '/Warning/' php_error.log
$ awk '{if($0 ~ /Warning/)print $0;}' php_error.log    #完整寫法

  篩選含Warning后面出現Startup的記錄:

$ awk '/Warning.*?Startup/' php_error.log
$ awk '{if($0 ~ /Warning.*?Startup/)print $0;}' php_error.log  #完整寫法

原始日志mysql_error.log如下:

[2015-12-20 20:45:51] Error in Mysql::fetch
E:\wamp\www\includes\class\db.cls.php on line 149
E:\wamp\www\htdocs\pp\system\Model.cls.php on line 44
E:\wamp\www\htdocs\pp\controllers\admin\ScoreController.cls.php on line 56
E:\wamp\www\htdocs\pp\system\Application.cls.php on line 72
E:\wamp\www\htdocs\pp\system\Application.cls.php on line 49
E:\wamp\www\htdocs\pp\index.php on line 19

[2015-12-20 20:45:51] mysql_errno: 1054
mysql_error: Unknown column 'score_rule' in 'field list'
E:\wamp\www\includes\class\db.cls.php on line 64
E:\wamp\www\htdocs\pp\system\Model.cls.php on line 43
E:\wamp\www\htdocs\pp\controllers\admin\SeController.cls.php on line 86
E:\wamp\www\htdocs\pp\system\Application.cls.php on line 72
E:\wamp\www\htdocs\pp\system\Application.cls.php on line 49
E:\wamp\www\htdocs\pp\index.php on line 19

  去除相同行(時間除外),並帶時間行數打印出:

$ awk '{if($1 ~ /^\[[[:digit:]]{4}-/){t=$0;}else{if(!a[$0]++)print NR, " ===> ", t, " ", $0;}}' mysql_error.log

  其他類似情況,請詳細理解正則表達式寫法。

  直接查看原始mysql-bin-log日志(binlog是二進制文件,查看不了,需借助mysqlbinlog工具):

$ mysqlbinlog mysql-bin-log.000038 > out.log 2>&1

  統計某文件夾下的文件行數:

grep -r -c ./* "<?php" | wc -l
grep -r -l "<?php" ./thinkphp/* | xargs cat | wc -l    #more perfect

wc -l *
find . -name "*.java" | wc -l 
find . -name "*.java" | wc -l | grep total

 

  對於字符一類的處理,awk,sed等命令是相當方便的,適當運用一下,對於工作還是挺方便的。但是這種東西用多了,往往在windows的工具下,也有這種操作的想法,但是絕對沒有這么方便,可以使用一些簡單的正則進行匹配一些字符,也還是提高查找速度的!

  正則:好東西!

  關鍵:找特征,寫規則,極簡化!

  注意:各個語言的具體描述,可能不同!

diff file1 file2        #比較兩個文件的差異
cat file.txt | sort > file.txt  #讓文件內容按字母排序

 

統計代碼行數:

find . -name '*.java' | xargs cat | wc -l

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM