我最近继承了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