【问题标题】:How to intercept all exceptions in a Spring MVC web application and how to store a lot of informations?如何拦截 Spring MVC Web 应用程序中的所有异常以及如何存储大量信息?
【发布时间】:2015-09-01 07:43:21
【问题描述】:

在 Web 应用程序(Spring 3.1.2 MVC)中,我需要拦截所有异常以将信息存储在数据库中。它就像一个记录器(它已经在 log4j.xml 文件中配置),但它的想法是将信息保存在特定的数据库表中。 那么如何按方面处理所有异常呢?通过过滤器?通过拦截器?不是@ControllerAdvice(自 Spring 3.2 起),因为该项目是使用 Spring 3.1 构建的。

第二次,当我捕捉到异常时,我该如何处理,如何检索大量信息:请求 url、引用 url、类、行、对象状态(类 + 值)?

为此存在一些框架(拦截和存储异常)?

【问题讨论】:

  • log4j 已经有一个数据库记录器,或者至少 logback 有一个。它将您记录的所有内容记录到数据库而不是文件中。要处理异常,您可以使用 after throwing 建议并进行日志记录。对于所有其他信息,请创建一个过滤器来设置 MDC 中的值。 (Logback 提供了一种开箱即用的方法)。
  • 你试过用@ExceptionHandler(Throwable.class)看吗?

标签: java spring spring-mvc exception web-applications


【解决方案1】:

我是Logback 的忠实粉丝,它为开箱即用的数据库提供了一个附加程序。 DBAppender 基本上将所有日志信息写入数据库、堆栈跟踪、消息和 MDC(设置时)。

要向您的日志记录添加其他属性,您可以注册 [MDCInsertingServletFilter],它将向 MDC 添加 URL、远程 ip、用户名(如果可用)等内容(因此将被记录)。

对于其他信息,您可以指定a pattern 以包含所需的信息。

要记录所有异常,您可以创建一个 after throwing 建议并将其应用于您的类。一件棘手的事情是确保您的异常只被记录一次,而不是一遍又一遍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 2019-10-25
    • 2013-12-14
    • 2012-03-12
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多