利用log4j显示hibernate打印sql中的参数

下面这个log4j的配置可以参考,已经测试过了,具体操作,把三个jar包放到lib下面,然后把property文件放到src目录下,就可以了

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>   
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.1</version>
</dependency> 
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.1</version>
</dependency>


log4j.rootLogger=ERROR, CA

# ConsoleAppender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%d{hh\:mm\:ss,SSS} [%t] %-5p %c %x - %m%n
 #下面才是关键
#\u4E3A\u4E86\u663E\u793A\u53C2\u6570
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
log4j.loggerorg.hibernate.type.descriptor.sql.BasicExtractor=TRACE
 
#\u67E5\u770B\u67E5\u8BE2\u4E2D\u547D\u540D\u53C2\u6570\u7684\u503C
 log4j.logger.org.hibernate.engine.QueryParameters=DEBUG
 log4j.logger.org.hibernate.engine.query.HQLQueryPlan=DEBUG



利用log4j显示hibernate打印sql中的参数

大家都知道在 hibernate.cfg.xml 配置文件中添加以下三条配置,就可以在控制台显示执行的sql:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 是否显示sql   -->  
  2. <property name="show_sql">true</property>  
  3. <!-- 是否格式化sql -->  
  4. <property name="format_sql">true</property>  
  5. <!-- 是否使用注释  -->  
  6. <property name="use_sql_comments">true</property>  

肯定遇到过这种情况:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /* insert cn.javasd.hibernate.ZlpUser  
  2.        */ insert   
  3.        into  
  4.            ZlpUser  
  5.            (name, password, createTime, expireTime, id)   
  6.        values  
  7.            (?, ?, ?, ?, ?)  

?的地方的值并不知道,当然可以跟踪程序断点获得,但是为了方便监控,可以使用log4j的配置来给这些占位符进行参数绑定(bind)

 

具体配置如下(单在hibernate环境下,未整合spring):

文件名:log4j.properties (根目录下)


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ### direct log messages to stdout ###    
  2.         log4j.appender.stdout=org.apache.log4j.ConsoleAppender    
  3.         log4j.appender.stdout.Target=System.out    
  4.         log4j.appender.stdout.layout=org.apache.log4j.PatternLayout    
  5.         log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n    
  6.             
  7.         log4j.logger.org.hibernate=debug  
  8.         log4j.logger.org.hibernate.hql.ast.AST=debug   
  9.           
  10.         #下面的两条配置非常重要,设置为trace后,将可以看到打印出sql中 ? 占位符的实际内容  
  11.         #this is the most important config for showing parames like ?  
  12.         log4j.logger.org.hibernate.SQL=trace   
  13.         log4j.logger.org.hibernate.type=trace  
  14.         #above two configs   
  15.         log4j.logger.org.hibernate.tool.hbm2ddl=debug   
  16.         log4j.logger.org.hibernate.hql=debug   
  17.         log4j.logger.org.hibernate.cache=debug  
  18.   
  19.   
  20.         log4j.logger.org.hibernate.transaction=debug   
  21.         log4j.logger.org.hibernate.jdbc=debug   
  22.         log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace  
  23.   
  24.             
  25.         log4j.rootLogger=warn, stdout    
  26.         log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE  

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 打印后的结果如下:  
  2.   
  3.    
  4.   
  5. Hibernate:   
  6.     /* insert cn.javasd.hibernate.ZlpUser  
  7.         */ insert   
  8.         into  
  9.             ZlpUser  
  10.             (name, password, createTime, expireTime, id)   
  11.         values  
  12.             (?, ?, ?, ?, ?)  
  13. 16:09:06,280 TRACE StringType:151 - binding '张路平2212' to parameter: 1  
  14.   16:09:06,284 TRACE StringType:151 - binding '3839729' to parameter: 2  
  15.   16:09:06,287 TRACE TimestampType:151 - binding '2013-01-16 16:09:06' to parameter: 3  
  16.   16:09:06,294 TRACE TimestampType:151 - binding '2013-01-16 16:09:06' to parameter: 4  
  17.   16:09:06,295 TRACE StringType:151 - binding '402881e13c426784013c426785cf0001' to parameter: 5  

当然,输出的结果中有很多对于自己不必要的信息,可以通过调整log4j的内容来控制输出,那几个debug的信息都可以注掉,其实 log4j.logger.org.hibernate.SQL=trace  这条也可以注掉,不然会打印出两遍sql

 

最后要说一下配置log4j需要注意的一些地方,特别是引入jar包的时候:

1、因为Hibernate 3用的是slf4j,因此要想使用log4j配置文件来全面配置Hibernate日志,
     还需要添加slf4j-log4j12-XX.jar。注意,如果添加了此jar包,需要移除slf4j-nop-XX.jar,
     否则控制台会有“Multiple bindings were found on the class path ”错误。

2、需要添加log4j-x.x.xx.jar

3、添加slf4j-api-x.x.x.jar

 

最后,附件是一个使用了这个配置的小例子

 

 也可以使用 p6spy 来配置,有兴趣的可以试一下,其实就是对jdbc做了代理

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值