Hibernate 使用log4j,sl4j 记录日志并记录sql 语句参数的值

摘要: 在Hibernate内部使用slf4j 来处理日志,所以在配置Hibernate日志的时候,slf4j 是必不可少的jar包, 严格说了slf4j 只是一个日志接口,可以由很多其它三方的 jar 来实现,比如用log4j实现等, 对于日志的配置应该都知道怎么配了,但是经常在日志中看到类似如下的语句:insert into stock (STOCK_CODE, STOCK_NAME) values (?, ?) , 里面全部是参数化的“?” 号, 然后这些值并没有打印出来,对于查看日志来说,还是有些不方便,怎么在日志中打印出这些参数值呢,是可以通过log4j 的配置做到的。

在Hibernate内部使用slf4j 来处理日志,所以在配置Hibernate日志的时候,slf4j 是必不可少的jar包, 严格说了slf4j 只是一个日志接口,可以由很多其它三方的 jar 来实现,比如用log4j实现等, 对于日志的配置应该都知道怎么配了,但是经常在日志中看到类似如下的语句:
insert into stock (STOCK_CODE, STOCK_NAME) values (?, ?) , 里面全部是参数化的“?” 号, 然后这些值并没有打印出来,对于查看日志来说,还是有些不方便,怎么在日志中打印出这些参数值呢,是可以通过log4j 的配置做到的。

[B]配置Hibernate log4j 日志文件 [/b]
通常log4j 配置文件放在classpath目录下, 也就是通常的src 目录下. 一个常用的hibernate log4j的配置如下:

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\yihaomen.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
 
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
 
# Root logger option
log4j.rootLogger=INFO, file, stdout
 
# Log everything. Good for troubleshooting
log4j.logger.org.hibernate=INFO
 
# Log all JDBC parameters
log4j.logger.org.hibernate.type=ALL


上面的配置日志会输出到C盘下,文件名为yihaomen.log, 同时在eclipse 的控制台也会输出.

Hiberante 显示 sql 参数的 配置
log4j.logger.org.hibernate.type = ALL , 这是重点,这就是hibernate 提供显示参数的配置。
配置之后,运行测试程序,会显示如下的结果:

Hibernate: insert into stock (STOCK_CODE, STOCK_NAME) values (?, ?)
21:13:25,390 TRACE BasicBinder:81 - binding parameter [1] as [VARCHAR] - [4715444]
21:13:25,390 TRACE BasicBinder:81 - binding parameter [2] as [VARCHAR] - [GENM]


这样用log4j 就完全能看到hibernate生成的SQL语句和参数了, 对于查找问题来说是很方便的事情。另外 log4j.logger.org.hibernate 这个配置对于调试Hibernate 程序查看信息也是很重要的,当然如果你不需要这些信息,可以注释掉.

上一篇: Hibernate4 拦截器(Interceptor) 实现实体类增删改的日志记录
下一篇: Hibernate4 No Session found for current thread原因
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号