Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正在分析Apache错误日志以查找唯一错误_Regex_Linux_Apache_Parsing_Logging - Fatal编程技术网

Regex 正在分析Apache错误日志以查找唯一错误

Regex 正在分析Apache错误日志以查找唯一错误,regex,linux,apache,parsing,logging,Regex,Linux,Apache,Parsing,Logging,我有一些难以控制的apache错误日志,我想通过这些日志进行解析并获得唯一的错误 [Fri Sep 21 06:54:24 2012][error][client xxx.xxx.xxx.xxx]PHP致命错误:,推荐人: 我想我只想在“PHP致命”部分切掉这些行,放弃上半部分,通过uniq运行下半部分。我的目标是识别所有的错误,但是由于重复的错误太多,有太多的行需要手动查看 实现这一点的最佳方法是什么?尝试grep-o'\[error\].$'文件|排序| uniq 这将只显示与正则表达式匹配

我有一些难以控制的apache错误日志,我想通过这些日志进行解析并获得唯一的错误

[Fri Sep 21 06:54:24 2012][error][client xxx.xxx.xxx.xxx]PHP致命错误:,推荐人:

我想我只想在“PHP致命”部分切掉这些行,放弃上半部分,通过uniq运行下半部分。我的目标是识别所有的错误,但是由于重复的错误太多,有太多的行需要手动查看


实现这一点的最佳方法是什么?

尝试
grep-o'\[error\].$'文件|排序| uniq

这将只显示与正则表达式匹配的内容(而不是包含匹配项的整个行)

然后sort将相似的条目放在一起,这样uniq就可以确保没有重复的条目

如果要在排序/统一之前删除客户端位,请使用
grep-o'\[error\].$'文件| sed's/\[client.\?\]/'| sort | uniq

与sed:

sed -r 's/(.*)(PHP Fatal error)/\2/' logfile | sort -u

要分析
/var/log/apache2/error.log
请使用

sed 's^\[.*\]^^g' /var/log/apache2/error.log | uniq -c | sort -n
这将

  • 在每行开始处剪切日期,如下所示:

    [28-Aug-2012 11:20:24 UTC]PHP通知:未定义索引:在/var/www/…中测试。。。在线

  • 计算唯一行数

  • 按事件排序
  • 资料来源:


    如果创建新日志,可以事先配置php:

    在php.ini中设置
    =On
    ,或添加
    ini\u集('ignore-repeated-errors',1)到您的php脚本

    这将阻止php多次记录错误,即由同一脚本中的同一行引起的错误消息

    资料来源:


    (但这有助于分析现有日志)

    正则表达式解析字符串可能是
    错误。*
    (在regex101.com上测试)

    下面的命令将确保搜索时不区分大小写

    grep -ori 'ERROR.*$' filename | sort | uniq