首先,我为所有不可恢复的异常抛出运行时异常,这导致这些异常向上传播到容器,我目前在容器中使用错误页面(在 web.xml 中定义)。在此错误页面中有一个调用记录器的脚本。
我遇到的问题是异常在这次调用时不再位于堆栈中。我可以从请求范围变量(“javax.servlet.error.message”)访问它。该字符串是堆栈跟踪。显然我需要这个堆栈跟踪用于日志记录,并且出于安全原因,可以在不同的应用程序服务器上关闭“javax.error_message”......
所以我的问题是,如何才能最好地从 Java EE 应用程序中记录运行时异常而不用将所有内容都包装在其中:
try {} catch (Exception e) {logger.log(...)}
?
我想要一些方法来从容器中调用记录器,例如……就在容器捕获异常之前。
最佳答案
我找到了一个解决方案。通过添加响应过滤器并包装 chain.doFilter(req, resp) ,如下所示:
try {
chain.doFilter(req,resp);
} catch (Exception e) {
logger.error("", e);
throw new RuntimeException(e);
}
目前为止一切正常,不依赖于特定的框架或应用服务器。
关于java - 捕获 Java EE Web 应用程序中的每个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267007/