如何将log4j日志记录实现到现有的J2EE Struts Web应用程序?

时间:2010-05-06 13:25:13

标签: java struts log4j legacy

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

2 个答案:

答案 0 :(得分:2)

最重要的是,我将在struts-config.xml中设置一个Struts异常处理程序来捕获从操作中抛出的所有内容并将其记录下来。然后我会检查所有的异常处理,看看有什么异常被吃掉,写入stdout,或者没有进入日志,并进行更改,以便每个无法有效处理的异常都被传播(包装在未经检查中)必要时的异常),以便它成为异常处理程序。

除此之外,我会像你描述的那样,将记录添加到直接有用的部分。只要异常被抛出并进入异常处理程序,就不应该做更多事情。

答案 1 :(得分:0)

如果进入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等。它可能不会生成最漂亮的输出,但您可以将其用作“快速修复”启动,然后在您找到更感兴趣的项目时使用更合适的日志记录替换旧版日志记录