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