2008-12-21 12 views
6

Ich versuche, eine saubere Möglichkeit zum Abfangen von nicht abgefangenen Ausnahmen in meiner Anwendung zu finden.Wie kann ich nicht abgefangene Ausnahmen auf Tomcat abfangen?

Ich habe Log4j für die Protokollierung der normalen Anwendungsablauf konfiguriert und Ausnahmen abgefangen, so dass darauf geachtet wird. Im Moment habe ich eine Klasse, die alle Nachrichten auf Fehlerlevel aufnimmt und sie zu einer Warteschlange hinzufügt, um sie per E-Mail zu verschicken.

Im Idealfall hoffe ich, dass es eine Möglichkeit gibt, die nicht abgefangenen Ausnahmen abzufangen, damit ich sie an die gleiche 'E-Mail-Batch'-Warteschlange weiterleiten kann, aber wenn das nicht möglich ist, bin ich sicher offen für Vorschläge.

Ich bin vertraut mit LogInterceptors auf JBoss, aber dieses Projekt verwendet Tomcat. Gibt es irgendeine Möglichkeit, dass ich das tun könnte? Gibt es für Tomcat einen LogInterceptor? Sollte ich versuchen, die Tomcat-Protokollierung auf einen benutzerdefinierten Appender umzuleiten? (Wenn ja - irgendwelche Hinweise darauf?) Einige andere Ideen?

Ich dachte, dass diese zu einem gelösten Problem inzwischen hat, so hoffe ich, einige kollektive Weisheit zu tippen. Danke, alle, im Voraus.

Antwort

5

Gemäß der J2EE 1.4-Spezifikation können nicht erfasste Ausnahmen innerhalb eines Servlets an eine Fehlerseite weitergeleitet werden, die im Implementierungsdeskriptor definiert ist. Wenn dies geschieht, empfängt die Seitenimplementierung die ursprünglichen Anfrage- und Antwortobjekte mit dem Zusatz eines Anforderungsattributs namens javax.servlet.error.exception, das das Ausnahmeobjekt enthält.

Das habe ich mit Tomcat noch nicht gemacht, und die meisten Webanwendungen, an denen ich gearbeitet habe, werden auf Webserver-Ebene an eine generische Fehlerseite weitergeleitet.

Edit: habe gerade versucht es auf meinem lokalen Server, nach dem folgenden meiner web.xml hinzugefügt, und es funktioniert wie beworben:

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

Es ist nicht Tomcat-spezifisch, aber Sie können set uncaught exception handlers on a per-thread basis.

Abhängig von der Konfiguration Ihrer Anwendung können Sie dies am Anfang Ihrer Methode festlegen, die eine Anforderung verarbeitet. Sie müssen es möglicherweise jedes Mal tun, da Sie einen Thread pro Anfrage erhalten können.

Ein guter Ort, um es einzustellen wäre in einer Art Front Controller.

+0

Ich denke, das funktioniert nicht als Tomcat wird alle Ausnahmen abfangen, auch wenn Ihre App nicht. Wenn es keine Threads in seinem Threadpool gibt, bleibt es bei Webapp-Fehlern stehen. –

Verwandte Themen