gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:22:04 25 4
gpt4 key购买 nike

我的网络服务有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com