• 日志查看技巧之筛选&去重[排查篇]


      引语:相信大家都会偶尔遇到要排查问题发生的原因的情况,那这种时候,我们最有力后盾就是日志文件了,所以谨记日志记录真的很重要。但是日志文件往往是很大的文件,而且里面有太多的东西可能不是我们需要的,如无数重复行。如果能够有效筛选出对我们有意义的记录,那就太方便了!下面,就记录一些我筛选日志的一些技巧,供自己和部分需要的新手朋友参考!(高能勿喷,欢迎留下你的高见)
      主要使用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
  • 相关阅读:
    14 用DFT计算线性卷积
    13 DFT变换的性质
    12 有限长序列的分类
    前端常见跨域解决方案
    JS基础-构造函数、原型、原型链、继承
    浏览器中的 JavaScript 执行机制
    再也不怕面试官问我 Promise 相关问题了
    前端面试---手写代码常考题
    从输入 URL 到页面展示,这中间发生了什么?
    学习笔记-CSS-圣杯布局和双飞翼布局
  • 原文地址:https://www.cnblogs.com/yougewe/p/5173635.html
Copyright © 2020-2023  润新知