在Struts应用程序中使用UncaughtExceptionHandler

时间:2013-07-17 12:21:22

标签: java logging exception-handling struts runtimeexception

我有一个基于Struts 2 MVC的Web应用程序。我必须在我已经做过的应用程序中配置正确的日志记录并且它正常工作。

我现在想要的是,我需要将所有运行时异常和由于系统故障引起的错误(例如丢失的数据库连接,任何第三方服务已关闭等等)记录在我的应用程序日志文件中。

我阅读了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>

1 个答案:

答案 0 :(得分:0)

这基本上应该自动发生;你是如何配置日志记录的?

现有的&#34;例外&#34;拦截器可以做到这一点,虽然它更像是一种实现&#34;如果发生异常就转到这个页面&#34;。

您可以使用相同的想法并围绕动作调用编写一个瘦拦截器,记录相关的异常信息并继续执行动作的原始结果名称,但这似乎有点因为RTE几乎肯定会中断正常流程。

IMO如果您正在收集可能抛出RTE的功能:

  • 该功能应该已经存在于服务中,并且......
  • ...该服务应该捕获异常并将它们包装在特定于应用程序的异常中,并且......
  • ...然后你可以使用现有的&#34;例外&#34;拦截器。