Hibernate SQL审计日志记录

时间:2009-03-06 14:20:50

标签: hibernate

我想在Hibernate中执行审计日志记录生成的SQL语句。我写了自定义Interceptor,它扩展了EmptyInterceptor。我重写了 onPrepareStatement 方法来获取生成的SQL。但是当我调试这段代码时,我只会生成没有这样的参数的SQL。

INSERT INTO TableA(Col1,Col2,Col3) VALUES(?,?,?)

如何从Hibernate

获取包含这样的参数值的完整SQL语句
INSERT INTO TableA(Col1,Col2,Col3) VALUES("Value1","Value2","Value3")

4 个答案:

答案 0 :(得分:2)

在hibernate cfg中,您可以将hibernate.show_sql属性设置为true,这将导致Hibernate将perpared语句(没有绑定到查询的参数值)输出到stdout。

要记录预编译语句和绑定到它们的参数列表,请在commons-logging(或基础日志系统)配置中设置log4j.logger.org.hibernate.SQL = DEBUG。

答案 1 :(得分:2)

接受的答案对我不起作用(Postgres版本8.3.7-1,驱动程序版本8.1-407)。

我还必须在日志记录配置中将“type”选项设置为DEBUG:

log4j.logger.org.hibernate.type=DEBUG

答案 2 :(得分:0)

看起来,根据你的log4j版本,这仍然是一个bug

https://hibernate.onjira.com/browse/HHH-2835

答案 3 :(得分:0)

如何使用众多“JDBC包装器”之一呢?

没有特别的顺序:

  1. P6Spy - http://sourceforge.net/projects/p6spy/
  2. log4jdbc - http://code.google.com/p/log4jdbc/
  3. JDBCLogger - http://jdbclogger.sourceforge.net/
  4. 还有很多很多