【问题标题】:Using UncaughtExceptionHandler in Struts Application在 Struts 应用程序中使用 UncaughtExceptionHandler
【发布时间】:2013-07-17 12:21:21
【问题描述】:

我有一个基于 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>

【问题讨论】:

    标签: java logging exception-handling struts runtimeexception


    【解决方案1】:

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

    现有的“异常”拦截器可以做到这一点,尽管它更多地是为了实现“如果发生异常则转到此页面”。

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

    IMO,如果您正在打包可能引发 RTE 的功能,那么:

    • 该功能应该已经存在于服务中,并且...
    • ...该服务应捕获异常并将它们包装在特定于应用程序的异常中,并且...
    • ...那么您可以使用现有的“异常”拦截器。

    【讨论】:

    • 不,如果发生一些异常,它不是关于重定向到错误页面,我已经在 struts.xml 中使用全局异常处理程序映射。我需要的是,假设我执行一个调用第三方服务但该服务已关闭(例如 Web 服务)的操作,然后我的 Eclipse 控制台显示 wsdl not found 的异常,但是当我倾向于在 tomcat/logs 目录中看到,我找不到它。现在,如果将来在生产中发生这种情况,我将如何跟踪根本原因?这是我的终极问题。
    • 请查看已完成的编辑。我已经添加了日志记录配置。我不认为这是导致问题的原因,记录的异常会正确地进入文件。
    • @VaibhavShukla 那有什么问题?
    • 出现系统故障如何跟踪?去哪里找那个?理想情况下,如果应用程序出现问题,我们会检查应用程序日志文件或 tomcat 的 catalina 日志,但就我而言,正如我在上面的评论中解释的那样,我无法跟踪。该错误没有日志,tomcat 没有 catalina 文件。我傻了。
    • @VaibhavShukla 那么您的日志记录配置不正确。如果您没有为异常拦截器设置logEnabled=true,我认为它不会记录它处理的异常。您还需要设置适当的日志级别。 struts.apache.org/release/2.2.x/docs/exception-interceptor.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多