Как я могу перехватить непонятные исключения на Tomcat? - PullRequest
6 голосов
/ 21 декабря 2008

Я пытаюсь найти чистый способ перехвата неперехваченных исключений, которые возникают в моем приложении.

Я настроил log4j для регистрации нормального потока приложения и перехвата исключений, поэтому об этом позаботились. Прямо сейчас у меня есть класс, который принимает все сообщения об ошибках и добавляет их в очередь для отправки по электронной почте в пакетном режиме.

В идеале, я надеюсь, что есть способ перехватить неперехваченные исключения, чтобы я мог передать их в одну и ту же очередь «пакета электронной почты», но если это невозможно, я, конечно, открыт на предложение.

Я знаком с LogInterceptors на JBoss, но этот проект использует Tomcat. Есть ли способ, которым я мог бы пойти по этому поводу? Существует ли LogInterceptor equivelant для Tomcat? Должен ли я попытаться перенаправить ведение журнала Tomcat на другой пользователь? (Если так - какие-нибудь намеки на это?) Другие идеи?

Я подумал, что у этого есть , чтобы быть решенной проблемой на данный момент, поэтому я надеюсь использовать некоторую коллективную мудрость. Спасибо всем заранее.

Ответы [ 2 ]

5 голосов
/ 21 декабря 2008

Согласно спецификации J2EE 1.4, неперехваченные исключения внутри сервлета могут быть перенаправлены на страницу ошибки, как определено в дескрипторе развертывания. Когда это происходит, реализация страницы получит исходные объекты запроса и ответа с добавлением атрибута запроса с именем javax.servlet.error.exception, который содержит объект исключения.

Тем не менее, я на самом деле не делал этого с Tomcat, и большинство веб-приложений, над которыми я работал, перешли к общей странице ошибок на уровне веб-сервера.

Изменить: только что опробовал его на моем локальном сервере, после добавления следующего в мой web.xml, и он работает как рекламируется:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/dumpRequest.jsp</location>
</error-page>
1 голос
/ 21 декабря 2008

Это не зависит от Tomcat, но вы можете установить необработанные обработчики исключений для каждого потока .

В зависимости от настроек вашего приложения, вы можете установить это в верхней части вашего метода, который обрабатывает запрос. Возможно, вам придется делать это каждый раз, так как вы можете получить поток за запрос.

Хорошим местом для установки будет какой-то фронт-контроллер.

...