jsp Web应用程序的调试标志

时间:2013-05-03 13:17:52

标签: java eclipse jsp web.xml

我有一个jsp web应用程序,我按如下方式打印错误堆栈跟踪:

    catch (SQLException e) {
        e.printStackTrace(System.out);
    }

但在生产环境中,我不希望我的应用程序打印一些东西。我想放一个全局标志(例如Debug = true)。然后我会像这样更新代码

  if(debug) e.printStackTrace(System.out);

我的申请表中有很多页面。现在我应该在哪里声明调试变量?我可以将它放在web.xml文件中,但我不确定它是否安全。谢谢

1 个答案:

答案 0 :(得分:3)

使用JB Nizet建议的日志记录API。它们使用起来相当简单。这是一个使用来自Apache(http://logging.apache.org/log4j)的Log4j实现日志记录的小例子,非常受欢迎。

您的所有课程都有一个记录器准备好的实例

private static final Logger log = Logger.getLogger(this.getClass());

然后在你捕捉异常的地方

catch (SQLException e) {
    log.debug(e);
}

然后只需使用log4j.properties

中的classpath配置Log4j
log4j.appender.stdout.Target=System.out
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

log4j.rootLogger=debug, stdout

转换日志就像改变

一样简单
log4j.rootLogger=warn, stdout

这意味着您只对处于警告级别或更高级别(如错误或致命)级别的日志语句感兴趣。大约有六个日志级别:致命,错误,警告,信息,调试和跟踪。设置级别时,将忽略以低于您指定的级别记录的所有日志语句。

请注意,我已经简化了上述内容。建议使用log4j.xml代替.properties。最新的API还允许您在记录之前完成检查以获得一些性能

catch (SQLException e) {
    if (log.isDebugEnabled()) log.debug(e);
}

但是,在执行Globals.DEBUG之前使用框架而不仅仅是检查printStackTrace()标志的真正卖点是它是未来的证据。如果您必须将文件记录到文件中,只需从ConsoleAppender切换到FileAppender即可。想要通过fatal发送的电子邮件,仅使用SMTPAppender来处理此用例。其他appender保持原样配置。