java - 如何监听 servlet 请求范围内的所有错误?

标签 java multithreading servlets error-handling listener

我的网络服务有 3 个 Servlet,它们实例化相同的请求范围对象,该对象存储有关当前请求的信息,例如 URL 路径、使用的资源以及在请求期间抛出的错误执行。目的是记录这些错误,并将它们作为客户端响应的一部分以 JSON 或 XML 形式发送。

我想使用:

public class ErrorEngine implements Thread.UncaughtExceptionHandler

创建一个类来捕获所有错误(在类代码中使用/不使用 try ),然后将它们保存到日志文件以及稍后将发送到客户端的数组中。我做了:

public ErrorEngine() {
    super();
    Thread.setDefaultUncaughtExceptionHandler(this);
    System.out.println("Error Handler Engine Started.");
}

@Override
public void uncaughtException(Thread t, Throwable e) {
    System.out.println("Thread: "+t.getId()+"; Error: "+e.getMessage());        
}

并且错误处理程序引擎已启动消息出现在控制台上,但是当我在servlet<的service()方法中使用除以零进行测试时 实例化了错误处理程序,我创建的用于测试的消息未显示,仅显示常规堆栈跟踪。

那么,如何正确监听 servlet 请求范围内的所有错误?

我想在自己的类和代码中处理它们,但我想从同一个位置记录它们,而不必在每次 try/catch 上调用我的错误处理程序类中的方法,甚至因为错误可能出现在我没有处理代码的地方,但我必须在日志中看到它们。

最佳答案

您可以使用 final doGet()/final doPost() 创建一个 MyBaseServlet ,它调用方法 myDoGet()/myDoPost() 分别(包裹在 try{}catch(Throwable t){uncaughtException(t)} 周围)。

每个 servlet 都应该扩展 MyBaseServlet 并在需要时进行覆盖 myDoPost()/myDoGet() 甚至 uncaughtException() 的默认实现;

关于java - 如何监听 servlet 请求范围内的所有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43525455/

相关文章:

java - 从不同线程调用时查询超时

java - 服务请求丢失了参数

java - 如何在 Java 中关闭嵌套 I/O 流

java - 在测试自动化中设置保存点并回滚到它时应遵循的最佳实践

c - 如何保证 64 位写入是原子的?

即使使用 SwingWorker,Java GUI 也会卡住

java - 应用程序不在服务器上生成报告

java - 动态地将/xxx/yyy/zzz映射到类XxxYyyZzz.java的servlet或过滤器

java - 无法从 Weblogic Server 10.3.6 生成 JFR 报告

java - 单击 recyclerAdapter 在大型数据集上工作很奇怪,但在小型数据集上工作正常