针对唯一错误解析Apache错误日志

时间:2012-09-21 14:35:10

标签: regex linux apache parsing logging

我有一些unruly apache错误日志,我想解析并获得唯一错误。

[Fri Sep 21 06:54:24 2012] [error] [client xxx.xxx.xxx.xxx ] PHP Fatal error: <error message>, referrer: <url>

我想我只想在&#34; PHP Fatal&#34;部分,丢弃上半场并通过uniq运行下半场。我的目标是识别所有错误,但是由于许多重复错误,手动查看的行数太多。

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

4 个答案:

答案 0 :(得分:2)

尝试grep -o '\[error\].*$' file | sort | uniq

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

然后sort将similair条目放在一起,这样uniq可以确保没有重复项。

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

答案 1 :(得分:1)

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

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

这将

  1. 在每行的开头剪切日期,如:

    [2012年8月28日11:20:24 UTC] PHP注意:未定义的索引:在/ var / www / ...中测试......

  2. 统计独特的行

  3. 按事件排序
  4.   

    来源:strictcoder.blogspot.de


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

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

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

      

    来源:php error log, how to remove the duplicates/find unique errors

    (但是这个doesen'i帮助分析现有的日志)

答案 2 :(得分:0)

使用sed:

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

答案 3 :(得分:0)

regex解析字符串可以是ERROR.*(在regex101.com上进行测试)

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

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