我有一组大型服务器日志文件,其中包含我感兴趣的记录错误,如下所示:
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的网址感兴趣。我知道我可以在com.el.servlet.Helper.checkJData(Helper.java:1205)'中查找所有行,但是如何在此之前获得两行?
Windows中是否有工具可以执行此操作?如果不是bash脚本也不错。
答案 0 :(得分:1)
使用bash脚本:
egrep -B1 "java.lang.NullPointerException" * | grep "request=" | cut -d"=" -f2-
而不是*将路径放到那些日志文件中。
答案 1 :(得分: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