【发布时间】:2017-09-17 10:30:28
【问题描述】:
我的网络服务有 3 个Servlets 实例化相同的请求范围对象,该对象存储有关当前请求的信息,例如 URL 路径、使用的资源以及在执行期间抛出的错误。目的是记录这些错误,并将它们作为客户端响应的一部分以 JSON 或 XML 形式发送。
我希望使用:
public class ErrorEngine implements Thread.UncaughtExceptionHandler
创建一个类来捕获所有错误(在类代码中使用/不尝试),然后将它们保存到日志文件以及稍后将转到客户端的数组中。我做到了:
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());
}
并且 Error Handler Engine Started 消息出现在控制台上,但是当我在实例化的servlet 的 service() 方法中使用 零 除法进行测试时错误处理程序,我创建用于测试的消息没有显示,只有常规堆栈跟踪。
那么,如何正确监听 servlet 请求范围内的所有错误?
我想在他们自己的类和代码中处理它们中的每一个,但我想从同一个地方记录它们,而不必在每次尝试/捕获时从我的错误处理程序类中调用方法,甚至因为错误可能出现在我没有为它们处理代码的地方,但我必须在日志中看到它们。
【问题讨论】:
标签: java multithreading servlets error-handling listener