0

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

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

我阅读了有关Thread.UncaughtExceptionHandler 的信息,也阅读了这个答案,但仍然无法开始满足这个要求。

有人可以建议我如何开始吗?要上什么课?要配置什么?等等等等。另外,我的应用程序中没有涉及多线程。

谢谢!

下面是我的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>
4

1 回答 1

0

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

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

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

IMO,如果您要完成可能引发 RTE 的功能,那么:

  • 该功能应该已经存在于服务中,并且......
  • ...该服务应该捕获异常并将它们包装在特定于应用程序的异常中,并且...
  • ...然后您可以使用现有的“异常”拦截器。
于 2013-07-17T14:14:48.657 回答