2008-12-21 4 views
6

J'essaye de trouver une manière propre d'intercepter des exceptions non saisies qui se produisent dans mon application.Comment intercepter des exceptions non interceptées sur Tomcat?

J'ai log4j configuré pour la journalisation du flux d'application normal et les exceptions interceptées, ce qui est pris en compte. À l'heure actuelle, j'ai une classe qui prend tous les messages de niveau d'erreur et les ajoute à une file d'attente pour être envoyé par lots. Idéalement, j'espère qu'il y a un moyen d'intercepter les exceptions non interceptées, afin que je puisse les transmettre à la même file d'attente, mais si cela n'est pas possible, je suis certainement ouvert à la suggestion. Je connais LogInterceptors sur JBoss, mais ce projet utilise Tomcat. Y a-t-il un moyen d'y aller? Existe-t-il un équivélant LogInterceptor pour Tomcat? Devrais-je essayer de rediriger la journalisation de Tomcat vers un appender personnalisé? (Si oui, y a-t-il des indices?) D'autres idées?

J'ai pensé que ce a pour être un problème résolu maintenant, donc j'espère tirer parti de la sagesse collective. Merci, tout le monde, à l'avance.

Répondre

5

Selon la spécification J2EE 1.4, les exceptions non interceptées dans une servlet peuvent être transmises à une page d'erreur telle que définie dans le descripteur de déploiement. Lorsque cela se produit, l'implémentation de page reçoit les objets de demande et de réponse d'origine, avec l'ajout d'un attribut de requête nommé javax.servlet.error.exception qui contient l'objet d'exception. Cela dit, je ne l'ai pas fait avec Tomcat, et la plupart des applications Web que j'ai travaillé sur une page d'erreur générique au niveau du serveur Web.

Edit: juste essayé sur mon serveur local, après avoir ajouté ce qui suit à mon web.xml, et il fonctionne comme annoncé:

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

Ce n'est pas Tomcat spécifique, mais vous pouvez set uncaught exception handlers on a per-thread basis. En fonction de la configuration de votre application, vous pouvez définir cela en haut de votre méthode qui gère une demande. Vous pourriez avoir à le faire à chaque fois, car vous pouvez obtenir un fil par demande.

Un bon endroit pour le régler serait dans une sorte de contrôleur frontal.

+0

Je suppose que cela ne fonctionnera pas car Tomcat va attraper toutes les exceptions, même si votre application ne le fait pas. Si ce n'est pas threads dans son pool de threads va continuer à mourir sur les erreurs webapp. –

Questions connexes