Exception 如何在Tomcat上拦截未捕获的异常?

Exception 如何在Tomcat上拦截未捕获的异常?,exception,tomcat,log4j,Exception,Tomcat,Log4j,我试图找出一种干净的方法来截获应用程序中发生的未捕获异常 我将log4j配置为记录正常的应用程序流和捕获的异常,这样就可以处理这些异常。现在,我有一个类,它接受所有错误级别的消息,并将它们添加到一个队列中,以批量发送电子邮件 理想情况下,我希望有一种方法可以拦截未捕获的异常,这样我就可以将它们传递到同一个“电子邮件批处理”队列,但如果这不可行,我当然愿意接受建议 我熟悉JBoss上的Loginterceptor,但是这个项目使用的是Tomcat。我有什么办法可以解决这个问题吗?Tomcat是否有

我试图找出一种干净的方法来截获应用程序中发生的未捕获异常

我将log4j配置为记录正常的应用程序流和捕获的异常,这样就可以处理这些异常。现在,我有一个类,它接受所有错误级别的消息,并将它们添加到一个队列中,以批量发送电子邮件

理想情况下,我希望有一种方法可以拦截未捕获的异常,这样我就可以将它们传递到同一个“电子邮件批处理”队列,但如果这不可行,我当然愿意接受建议

我熟悉JBoss上的Loginterceptor,但是这个项目使用的是Tomcat。我有什么办法可以解决这个问题吗?Tomcat是否有LogInterceptor等价物?我是否应该尝试将Tomcat日志重定向到自定义appender?(如果有,有什么提示吗?)


我想现在这个问题已经解决了,所以我希望能利用一些集体智慧。谢谢大家。根据J2EE1.4规范,servlet中未捕获的异常可能会转发到部署描述符中定义的错误页面。发生这种情况时,页面实现将接收原始请求和响应对象,并添加一个名为javax.servlet.error.exception的请求属性,该属性包含异常对象

也就是说,我实际上还没有用Tomcat完成这项工作,我所处理的大多数web应用程序都会在web服务器级别转发到一个通用错误页面

编辑:在将以下内容添加到my web.xml后,刚在本地服务器上试用过,效果如广告所示:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/dumpRequest.jsp</location>
</error-page>

java.lang.Exception
/dumpRequest.jsp

它不是Tomcat特有的,但您可以

根据应用程序的设置,您可以在处理请求的方法顶部设置此选项。您可能每次都要这样做,因为每个请求可能会有一个线程


设置它的好地方应该是在某种前端控制器中。

我想这不会起作用,因为tomcat将捕获所有异常,即使你的应用程序没有。如果它不这样做,其线程池中的线程将在webapp错误时继续消亡。