簡體   English   中英

如何將log4j日志記錄實現到現有的J2EE Struts Web應用程序?

[英]How can I implement log4j logging to an existing J2EE Struts web application?

我最近繼承了2002年編寫的J2EE Struts Web應用程序。除了奇怪的System.out.println()之外,應用程序中沒有記錄。
我已經添加了log4j日志記錄,以便我可以向控制台寫出一些信息,但我擔心如何最好地解決這個問題。 任何建議,提示和最佳實踐都會受到歡迎,因為我不想花太多時間在每個方法或類中添加日志記錄(或者試圖找到最適合日志記錄的位置 - 即錯誤的代碼塊/缺陷)。
我目前的方法是只添加一些日志記錄到我一直在尋找的幾個類來理解代碼,但是有幾個關鍵的地方我可以添加日志記錄以最大化我添加log4j的使用?

編輯:
進度更新:
我擴展了Struts(v.1) ExceptionHandler ,並將struts-config.xml配置為使用我的CustomExceptionHandler而不是Struts版本。 然后通過重寫execute()方法,我添加了一些邏輯來使用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>

現在我可以確定我將始終適當地記錄任何異常。
對於被吃掉的異常,我將它們包裝在未經檢查的異常中,以便它們成為頂部:

} catch (Exception e) {
//nothing here
}

變成:

} catch (Exception e) {
 throw new RuntimeException(e);
}

最重要的是,我將在struts-config.xml中設置一個Struts異常處理程序來捕獲從操作中拋出的所有內容並將其記錄下來。 然后我會檢查所有的異常處理,看看有什么異常被吃掉,寫入stdout,或者沒有進入日志,並進行更改,以便每個無法有效處理的異常都被傳播(包裝在未經檢查中)必要時的異常),以便它成為異常處理程序。

除此之外,我會像你描述的那樣,將記錄添加到直接有用的部分。 只要異常被拋出並進入異常處理程序,就不應該做更多的事情。

如果進入System.out(System.err)的唯一事情是舊的日志記錄並且您正在尋找一個簡單的解決方案,您可以始終將System.out重定向到應用程序生命周期啟動時圍繞記錄器的包裝類:

public class LoggerStream extends PrintStream {
  Logger legacyLogger = Logger.getLogger("app.legacyLogger");

  ...

  public void println(String s){
    legacyLogger.log(s);
  }
}

覆蓋任何其他方法,如print等。它可能不會生成最漂亮的輸出,但您可以將其用作“快速修復”啟動,然后在找到更感興趣的項目時用更合適的日志記錄替換舊版日志記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM