2013-02-19 166 views
0

我在Java中相当新,目前在Struts 1.3中工作。我的问题是更多与Java相关。Java:有关服务器日志的异常报告帮助

以下是这种情况,我不确定要遵循的最佳方法。

我想在我的项目中创建一个错误报告功能,在这里我正在复制stacktrace并将它插入到数据库的表中,并声明具有异常,日期,用户等等字段类型的“errorlog”表。但现在我要做的是: 我必须在发生异常时使用服务器日志的帮助来确定发生异常的包名称,文件,方法和行号。 但问题是,日志为您提供了异常,文件和行号,但同时也包含了不是我的包在HttpServlet.service如下错误(HttpServlet.java:710)等:

java.lang.NullPointerException 
com.candidate.query.CandSearchAction.execute(CandSearchAction.java:34) 
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) 
org.apache.struts.action.RequestProcessor.proc ess(RequestProcessor.java:274) 
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) 
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 

在上面的例子中,我在我的CandSearchAction.java行号34中得到了一个空指针异常。 现在我想知道如何区分或只提取指向我的java/jsp文件的行,以便我可以过滤它们因此。

任何人都可以请帮助关于这种情况或如何解决这个问题..有任何图书馆,我可以使用或任何可以帮助我。 等待回应,帮助我。

回答

0

如果您的代码遵循您在示例中使用的相同基本结构,则可以从堆栈名称的1开始解析堆栈跟踪,并仅使用这些行。

+0

如何识别或列出我的项目的所有包,以便我可以将其与堆栈跟踪进行比较...是否有任何特定方法或API需要使用? – user1629770 2013-02-20 06:51:24

+0

Exception.getStackTrace()返回一个StackTraceElements数组。您可以抓住第一个(异常的名称),然后从元素1开始,您可以看到它是否以(<任意一个包名>开头)。如果是,记录它,如果没有,离开循环,继续前进。不幸的是,我不知道任何可以抓取所有软件包名称的库或API。我的直觉是建立一个常量类,返回这些名称的硬编码列表,所以至少只有一个地方需要维护它。 – 2013-02-20 17:18:37

+0

是的,我现在正在做什么..但我认为可能有更好的方法来获得相同的结果。感谢您的回复Eric! – user1629770 2013-02-22 05:45:32