我有一些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运行下半场。我的目标是识别所有错误,但是由于许多重复错误,手动查看的行数太多。
实现这一目标的最佳方法是什么?
答案 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
这将
在每行的开头剪切日期,如:
[2012年8月28日11:20:24 UTC] PHP注意:未定义的索引:在/ var / www / ...中测试......
统计独特的行
如果您创建新日志,则可以事先配置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