捕获Java EE Web应用程序中的每个异常

Zom*_*ies 6 java logging exception-handling java-ee

首先,我为所有不可恢复的异常抛出运行时异常,这导致这些异常传递到容器,我目前使用错误页面(在web.xml中定义).在此错误页面中是一个调用记录器的scriptlet.

我遇到的问题是在此调用时异常不再在堆栈上.我可以从请求范围变量("javax.servlet.error.message")访问它.该字符串是堆栈跟踪.我显然需要这个堆栈跟踪用于记录目的,并且出于安全原因,可以在不同的应用服务器上"关闭"javax.error_message".......

所以我的问题是,如何在Java EE应用程序中最好地记录运行时异常,而不包括以下内容:

try {} catch (Exception e) {logger.log(...)}
Run Code Online (Sandbox Code Playgroud)

我想要某种方式从容器中调用记录器可能......就在容器捕获例外之前.

Zom*_*ies 3

我找到了解决方案。通过添加响应过滤器并包装 chain.doFilter(req, resp) ,如下所示:

try {
    chain.doFilter(req,resp);
} catch (Exception e) {
    logger.error("", e);
    throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这工作得很好,并且不依赖于特定的框架或应用程序服务器。