2013-02-19 167 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