2013-07-17 3 views
0

У меня есть веб-приложение на основе Struts 2 MVC. Я должен был настроить правильную регистрацию в приложении, которое я уже сделал, и его работа прекрасна.Использование UncaughtExceptionHandler в приложении Struts

Что мне сейчас нужно, мне нужны все исключения и ошибка во время выполнения из-за сбоя системы (например, потерянное соединение с базой данных, любая сторонняя служба и т. Д. И т. Д.), Чтобы быть зарегистрированным в моем файле журнала приложений.

Я прочитал о Thread.UncaughtExceptionHandler, а также прошел через this ответ, но по-прежнему не в состоянии начать работу с этим требованием.

Может кто-нибудь предложить мне, как начать с этим? Какие классы делать? Что настроить? и т. д. Также, чтобы сказать, в моем приложении нет многопоточности.

Спасибо!

Ниже мой log4j.properties

log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=${catalina.home}/logs/backlogApp.log 
log4j.appender.file.MaxFileSize=1000KB 
log4j.appender.file.MaxBackupIndex=1 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-4p %m%n 
log4j.appender.DatePattern='.'yyyy-MM-dd 

# Root logger option 
log4j.rootLogger=WARN, file 
log4j.logger.com.nagarro=WARN 

# OFF Hibernate and Spring 
log4j.logger.org.hibernate=OFF 
log4j.logger.org.springframework=OFF 

# OFF all JDBC parameters 
log4j.logger.org.hibernate.type=OFF 

Кроме того, глобальный обработчик исключений в struts.xml

<global-results> 
     <result name="error">/jsp/errorpage.jsp</result> 
     <result name="sessionexpired">/jsp/login.jsp</result> 
    </global-results> 

    <global-exception-mappings> 
     <exception-mapping exception="java.lang.Exception" 
      result="error" /> 
     <exception-mapping exception="javax.persistence.PersistenceException" 
      result="error" /> 
    </global-exception-mappings> 

ответ

0

Это должно в основном происходит автоматически; как вы настраиваете ведение журнала?

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

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

IMO если вы подведению функциональные возможности, которые могли бы бросить RTE тогда:

  • Эта функциональность уже должна жить в службе, и ...
  • ... что сервис должен перехватывать исключения и оберните их в конкретное приложение, и ...
  • ... тогда вы можете использовать существующий перехватчик исключений.
+0

Нет, его не касается перенаправления на страницу с ошибкой, если произошло какое-то исключение, которое я уже сделал с использованием глобального сопоставления обработчиков исключений в struts.xml. Мне нужно, предположим, что я выполняю действие, вызывающее стороннюю службу, но эта служба недоступна (скажем, веб-служба), тогда моя консоль eclipse показывает исключение ** wsdl не найден **, но когда я склонен видеть в директории tomcat/logs я не могу ее найти. Теперь, в будущем, если это произойдет при производстве, как я буду отслеживать основную причину? Это моя последняя проблема. –

+0

@VaibhavShukla Затем ваш журнал настроен неправильно. –

+0

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