【问题标题】:Parsing Apache Error Logs For Unique Errors为独特的错误解析 Apache 错误日志
【发布时间】:2012-09-14 00:01:22
【问题描述】:

我有一些不守规矩的 apache 错误日志,我想对其进行解析并获得独特的错误。

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

我想我只想在“PHP Fatal”部分删减行,丢弃前半部分并通过 uniq 运行后半部分。我的目标是找出所有的错误,但是由于有很多重复的错误,有太多的行需要手动查看。

最好的方法是什么?

【问题讨论】:

    标签: regex linux apache parsing logging


    【解决方案1】:

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

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

    然后 sort 将相似的条目彼此相邻,以便 uniq 可以确保没有重复。

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

    【讨论】:

      【解决方案2】:

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

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

      这会

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

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

      2. 计算唯一行数

      3. 按出现次数排序

      来源: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

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

      【讨论】:

      • uniq 仅在它们彼此相邻时检测唯一条目。如果您只想折叠重复的结果,这很好,否则,您需要先对结果进行排序sed 's^\[.*\]^^g' ./error-log | sort | uniq -c | sort -n
      【解决方案3】:

      使用 sed:

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

      【讨论】:

        【解决方案4】:

        正则解析字符串可以是ERROR.*(在regex101.com上测试)

        以下命令将确保搜索不区分大小写

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-27
          • 1970-01-01
          • 1970-01-01
          • 2020-08-29
          • 2021-05-25
          • 1970-01-01
          • 2018-06-19
          相关资源
          最近更新 更多