我最近繼承了2002年寫回的J2EE Struts Web應用程序。除了奇怪的System.out.println()之外,沒有在應用程序中進行日誌記錄。
我已經添加了log4j日誌記錄,以便我可以向控制檯寫出一些信息,但我很關心如何最好地處理這個問題。任何建議,技巧和最佳實踐都會受到歡迎,因爲我不想花費太多時間將日誌記錄添加到每個方法或類中(或試圖找到日誌記錄最好的地方 - 即錯誤的代碼塊/缺陷)。
我目前的做法是隻添加一些日誌記錄到我一直在尋找的幾個類來理解代碼,但是有幾個關鍵的地方可以添加日誌記錄以最大化地使用添加log4j?如何實現log4j日誌記錄到現有的J2EE Struts Web應用程序?
編輯:
的最新進展:
我擴展了Struts(第1節)ExceptionHandler
並配置了struts-config.xml
使用我的CustomExceptionHandler
而不是Struts的版本。然後通過重寫方法,我添加了一些邏輯來使用log4j
來記錄異常。請看下圖:
public class CustomExceptionHandler extends ExceptionHandler { static Logger logger = Logger.getLogger(CustomExceptionHandler.class); public ActionForward execute(Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException { logException(ex); return super.execute(ex, ae, mapping, formInstance, request, response); } private void logException(Throwable thr) { // Add code here to log the exception appropiately // i.e. logger.error("Exception is: " + ex.getMessage()); }
的struts-config.xml文件必須被更新:
<global-exceptions>
<exception key="" type="java.lang.Throwable" handler="com.mycompany.CustomExceptionHandler" />
</global-exceptions>
現在我可以肯定,我會永遠appropiately記錄任何異常。
對於已越來越吃進去的例外,我包起來unchecked異常,讓他們使其頂端:
} catch (Exception e) { //nothing here }
更改爲:
} catch (Exception e) { throw new RuntimeException(e); }
至於你的第一個建議,你的意思是這樣的:<全球異常><例外鍵=「」類型=「java.lang.Throwable中的」處理程序=「com.mycompany.CustomHandler」 />全球 - 異常「。 CustomHandler覆蓋執行方法。在執行方法中,我添加了一個方法logException(Throwable t){},然後在我登錄異常之後調用super.execute()。 – Ruepen 2010-05-07 15:04:26
是的,就像那樣。有一個StrutsExceptionHandler是struts-1發行版的一部分,唯一錯誤的是它將所有內容記錄爲DEBUG。 – 2010-05-07 16:04:28
當你說「必要時包裝在非檢查異常中」時,你的意思是: catch(IOException e){0} {0}拋出new RuntimeException(e); (例外e){ throw new RuntimeExcpetion(e); } 我在代碼中看到,有不少如下: 趕上(例外五){// 這裏沒什麼} 是 – Ruepen 2010-05-11 13:45:13