调整一个特定JDBC错误的hibernate日志记录级别

ric*_*all 5 java logging hibernate jdbc

环境:Hibernate 4.2.6

场景:hibernate为特定的"唯一约束PK_XXX违反"sql异常记录"ERROR".但是由于我们特定的多实例部署方案,我们需要将此调整为"INFO"级别,以用于此特定"唯一约束PK_XXX违反"sql异常.(所以它不会混淆IT人员).

换句话说,从技术上讲它是"错误",但从商业角度来看它是"信息".

目前:

2016.01.19 13.20.14,299 [ ERROR ][ ][ ][ ] org.hibernate.engine.jdbc.spi.SqlExceptionHelper - logExceptions() ORA-00001: unique constraint (PK_LOCKINFO) violated

期望:

2016.01.19 13.20.14,299 [ INFO ][ ][ ][ ] org.hibernate.engine.jdbc.spi.SqlExceptionHelper - logExceptions() ORA-00001: unique constraint (PK_LOCKINFO) violated

前进的最简单方法是什么?我能想到的选择:

  1. 修改hibernate内部类"org.hibernate.engine.jdbc.spi.SqlExceptionHelper",然后重新编译"hibernate"jar

具体的定制是:在"唯一约束PK_LOCKINFO违反"sql异常的情况下,将其记录为"INFO"级别而不是"ERROR"级别.但是任何其他sql异常仍应记录为"ERROR"级别.在我们前进的过程中,这一选择提出了挑战.每次hibernate升级时我们都必须这样做.

  1. 有一个类在我们自己的代码库中扩展和自定义hibernate类"org.hibernate.engine.jdbc.spi.SqlExceptionHelper"这样我们就不必编译一个"hibernate"jar了.这可能吗?

  2. 在我们的代码中添加一个事后监听器,它不断地扫描"log",然后对它做一些事情

不确定我是否喜欢选项#3.似乎太尴尬了.

还有其他选择吗?

ric*_*all 0

我们最终选择了选项#2:有一个类来扩展和自定义 hibernate 类“org.hibernate.engine.jdbc.spi.SqlExceptionHelper”

  • 您能详细说明如何将扩展类与 spring 连接吗?我创建了一个扩展 SQLExceptionHandler 的类并重写这些方法。接下来做什么? (6认同)
  • 如果您能够将 SqlExceptionHelper 扩展集成到 spring 框架中,那就太好了。SqlExceptionHelper 由 JdbcEnvironmentImpl 的构造函数实例化,并且它是最终的。如何注入你的扩展? (3认同)