2008-12-21 8 views
6

Estoy tratando de encontrar una manera limpia de interceptar las excepciones no detectadas que ocurren en mi aplicación.¿Cómo puedo interceptar excepciones no detectadas en Tomcat?

Tengo log4j configurado para registrar el flujo de aplicaciones normal y detectar excepciones, por lo que se soluciona. En este momento, tengo una clase que toma todos los mensajes de nivel de error y los agrega a una cola para enviar por correo electrónico en lotes.

Idealmente, espero que haya una forma de interceptar las excepciones no detectadas, de modo que pueda pasarlas a la misma cola de "correo electrónico por lotes", pero si esto no es posible, estoy seguro abierto a sugerencias.

Estoy familiarizado con LogInterceptors en JBoss, pero este proyecto utiliza Tomcat. ¿Hay alguna manera de que yo pueda hacer esto? ¿Hay un Equivelant LogInterceptor para Tomcat? ¿Debería intentar redirigir el registro de Tomcat a un appender personalizado? (Si es así, ¿alguna pista sobre eso?) ¿Algunas otras ideas?

Me di cuenta de que este tiene como un problema resuelto por el momento, así que espero aprovechar algunos conocimientos colectivos. Gracias, a todos, de antemano.

Respuesta

5

Según la especificación J2EE 1.4, las excepciones no detectadas dentro de un servlet pueden reenviarse a una página de error como se define en el descriptor de despliegue. Cuando esto sucede, la implementación de la página recibirá los objetos de solicitud y respuesta originales, con la adición de un atributo de solicitud llamado javax.servlet.error.exception que contiene el objeto de excepción.

Dicho esto, en realidad no he hecho esto con Tomcat, y la mayoría de las aplicaciones web en las que he trabajado remiten a una página de error genérico en el nivel del servidor web.

Editar: simplemente probé en mi servidor local, después de añadir lo siguiente a mi web.xml, y funciona como se anuncia:

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

No es Tomcat específico, pero se puede set uncaught exception handlers on a per-thread basis.

Dependiendo de la configuración de su aplicación, puede configurar esto en la parte superior de su método que maneja una solicitud. Puede que tenga que hacerlo todo el tiempo, ya que puede obtener un hilo por solicitud.

Un buen lugar para configurarlo sería en algún tipo de controlador frontal.

+0

Supongo que esto no funcionará ya que Tomcat tendrá en cuenta todas las excepciones, incluso si su aplicación no lo hace. Si no los hilos en su threadpool seguirán muriendo en los errores de webappp. –

Cuestiones relacionadas