zoukankan      html  css  js  c++  java
  • 日志查看技巧之筛选&去重[排查篇]

      引语:相信大家都会偶尔遇到要排查问题发生的原因的情况,那这种时候,我们最有力后盾就是日志文件了,所以谨记日志记录真的很重要。但是日志文件往往是很大的文件,而且里面有太多的东西可能不是我们需要的,如无数重复行。如果能够有效筛选出对我们有意义的记录,那就太方便了!下面,就记录一些我筛选日志的一些技巧,供自己和部分需要的新手朋友参考!(高能勿喷,欢迎留下你的高见)
      主要使用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:wampwwwhtdocswx_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:wampwwwincludesclassdb.cls.php on line 149
    E:wampwwwhtdocsppsystemModel.cls.php on line 44
    E:wampwwwhtdocsppcontrollersadminScoreController.cls.php on line 56
    E:wampwwwhtdocsppsystemApplication.cls.php on line 72
    E:wampwwwhtdocsppsystemApplication.cls.php on line 49
    E:wampwwwhtdocsppindex.php on line 19
    
    [2015-12-20 20:45:51] mysql_errno: 1054
    mysql_error: Unknown column 'score_rule' in 'field list'
    E:wampwwwincludesclassdb.cls.php on line 64
    E:wampwwwhtdocsppsystemModel.cls.php on line 43
    E:wampwwwhtdocsppcontrollersadminSeController.cls.php on line 86
    E:wampwwwhtdocsppsystemApplication.cls.php on line 72
    E:wampwwwhtdocsppsystemApplication.cls.php on line 49
    E:wampwwwhtdocsppindex.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
  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/yougewe/p/5173635.html
Copyright © 2011-2022 走看看