【问题标题】:Spring JdbcTemplate how to log parameters on exceptions?Spring JdbcTemplate如何记录异常参数?
【发布时间】:2014-11-27 14:34:04
【问题描述】:

使用 Spring 的 JdbcTemplate,我一直在尝试找出一种在 DAO 层中记录异常的干净方法,但似乎无法弄清楚。我想记录使用 参数的 SQL 语句。

例如,其中 addStoreSql 是参数化语句

public int addStore(Store store) {
    return jdbcTemplate.update(addStoreSql, store.getId(), store.getName());        
}

我正在做类似的事情..

public int addStore(Store store) {
    try{
        return jdbcTemplate.update(addStoreSql, store.getId(), store.getName());        
    } catch (DataAccessException ex) {
        logger.error("exception on deleting store - " + store.toString(), ex);
        throw ex;
    }
}

我的问题,有没有办法在许多 dao 方法中更清晰地编写这个?可能在记录器级别或某些 Spring 库?或者这是最干净的方式(或者上面的代码甚至很糟糕)?

我有多个方法基本上做同样的事情,接受一个对象,将字段传递给查询并返回结果。

【问题讨论】:

  • 这个链接是针对标准 java jdbc 库的,我知道。但我的问题与 Spring 库有关。我觉得我可能遗漏了一些东西,可能是使用 AOP?或者可能是 Spring 的一些日志记录功能,它不是标准 java jdbc 库的一部分。

标签: java spring spring-mvc jdbctemplate


【解决方案1】:

使用 Spring 执行此操作的困难在于,您希望从中获取此信息的 JDBC 对象不是 Spring 管理的对象,它们是由驱动程序创建的。所以 Spring AOP 将不适用(不使用 AspectJ)。

如果您在 DEBUG 级别记录类别“org.springframework.jdbc.core.JdbcTemplate”,在 TRACE 级别记录“org.springframework.jdbc.core.StatementCreatorUtils”,Spring 可以为您单独提供查询和参数。

现有的库 log4jdbcp6spy 实现了 JDBC 驱动程序的包装,以便生成插入适当参数的 SQL 语句。 See this question。使用其中任何一个都应该是将 jar 添加到项目中,将 jdbc url 更改为指向包装器,并调整日志记录以获得所需的信息级别。

现有的日志记录代码不好,因为它是重复的剪切粘贴代码,并且会导致多次记录异常。日志将更难阅读,并且会更频繁地滚动。

【讨论】:

  • 啊,我明白了。好的,这比我希望的要麻烦一些,但可能会引导我找到我正在寻找的东西。谢谢
【解决方案2】:

绝对不要使用这种模式:

    logger.error("exception on deleting store - " + store.toString(), ex);
    throw ex;

因为如果经常导致重复的日志条目。应该有一些针对异常的全局陷阱,它的职责是记录错误。

编辑

关于异常的全局陷阱,我的意思是每个应用程序都应该有一些机制来从 Java 代码中捕获大多数(理想情况下是所有)异常并记录它们。想象一下,您没有捕获和错过一些重要错误的日志。当你试图弄清楚生产中发生了什么时,你是盲目的。

所以让我们假设我们有这样的异常日志记录机制。您的模式将记录 SQL 错误并引发异常,该异常将被全局异常陷阱捕获并再次记录。你不希望这种情况发生,所以不要将它记录在你的代码中,保存一行代码并且不要创建重复的日志条目。

【讨论】:

  • 您能详细说明一下吗?您对如何以“Spring”方式执行此操作有任何参考,或者我应该配置 log4j 中的某些内容吗?只需要一点点让我开始,我在网上找不到任何东西,但我可能搜索错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 2021-06-21
  • 2014-08-20
  • 2018-01-14
  • 2014-02-28
  • 2019-07-06
相关资源
最近更新 更多