【问题标题】:Debug flag for jsp web applicationjsp Web 应用程序的调试标志
【发布时间】:2013-04-27 21:53:42
【问题描述】:

我有一个 jsp Web 应用程序,我在其中打印错误堆栈跟踪,如下所示:

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

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

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

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

【问题讨论】:

  • 你没有一些类来存储全局变量和配置文件的路径(不是像web.xml 这样的那些,而是直接在你的应用程序中使用)?
  • 使用像 slf4j、log4j 或 java.util.logging 这样的日志 API。这就是他们的目的。

标签: java eclipse jsp web.xml


【解决方案1】:

使用 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);
}

然后只需在您的classpath 中使用log4j.properties 配置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);
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    相关资源
    最近更新 更多