0

我有一组大型服务器日志文件,其中记录了我感兴趣的错误,如下所示:

2013-08-14 07:49:00,490 [ajp-8009-5] ERROR com.el.filter.SiteFilter - Caught Top-Level Exception - request=http://www.site2.com/something/home.dept?page=error&buy=123&switchcurrency=EUR
java.lang.NullPointerException
    at com.el.servlet.Helper.checkJData(Helper.java:1205)
    at com.el.servlet.ElServlet.doPost(ElServlet.java:113)

(...)

2013-08-14 08:18:37,984 [ajp-8009-3] ERROR com.el.filter.SiteFilter - Caught Top-Level Exception - request=http://www.site1.com/productId=123456.html
java.lang.NullPointerException
    at com.el.servlet.Helper.checkJData(Helper.java:1205)
    at com.el.servlet.ElServlet.doPost(ElServlet.java:113)

就像我提到的那样,这些文件非常大,其中有很多 NullpointerExceptions,由各种东西引起。

我有兴趣从所有这些文件中提取在 checkJData 方法中导致 NPE 的 url。我知道我可以 grep 'at com.el.servlet.Helper.checkJData(Helper.java:1205)' 的所有行,但是在那之前如何获取这两行?

在 Windows 中是否有工具可以做到这一点?如果不是 bash 脚本也会很好。

4

2 回答 2

1

使用 bash 脚本:

egrep -B1 "java.lang.NullPointerException" * | grep "request=" | cut -d"=" -f2-

而不是 * 放置这些日志文件的路径。

于 2013-08-21T14:02:57.443 回答
0

一个 Windows 解决方案:这使用一个名为 findrepl.bat 的帮助批处理文件 - http://www.dostips.com/forum/viewtopic.php?f=3&t=4697

findrepl "at com.el.servlet.Helper.checkJData\(Helper.java:1205\)" /o:-2:+0 <file.log
于 2013-08-21T14:24:39.740 回答