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

标签 java logging jakarta-ee exception-handling

首先,我为所有不可恢复的异常抛出运行时异常,这导致这些异常向上传播到容器,我目前在容器中使用错误页面(在 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/

相关文章:

java - 如何在 java 中将日期添加 2 周?

java - systemProperties和integrationGlobalProperties冲突

java - 如何正确对齐 EditText 光标?

logging - Service Fabric 参与者和服务的关联 token

java - 当应用服务器需要重启时,针对哪个文件类型改变?

java - 如何使用 JavaDB 作为 SQL 解析器

session - 如何跨多个Web应用程序,多个微服务跟踪 session

java - 如何使用 AWS Java SDK 禁用请求级日志记录?

java - 可利用的 Java 函数

java - 如何使用实体管理器使用查询将值插入数据库,使用 java 类进行持久化?