Hibernate记录太多信息

时间:2011-08-06 00:14:10

标签: hibernate log4j logging

我在log4j.properties文件中有以下信息..

log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File = C:\\app\\file.log
log4j.appender.file.Threshold = TRACE
log4j.appender.file.DatePattern = '.'yyy-MM-dd
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d %5p [%C:%M:%L] - %m%n
log4j.rootLogger = DEBUG, file
#HIbernate logging
log4j.logger.org.hibernate.SQL = DEBUG, file
log4j.logger.org.hibernate.type = TRACE, file
log4j.additivity.org.hibernate.SQL = false

此配置的问题在于它将大量信息写入日志文件,并且该文件在短时间内会增长为MB。所以我想知道是否有什么办法可以阻止hibernate弄乱日志文件,只写sql select语句和参数而不是别的。

1 个答案:

答案 0 :(得分:3)

您可以使用Pass through Java JDBC驱动程序来记录SQL和/或JDBC calls以获取其他JDBC驱动程序,而不是真正冗长且不直观的hibernate SQL日志记录。

通过JDBC驱动程序的优点是,对于预准备语句,已记录的输出会将绑定参数自动插入到SQL输出中。这极大地提高了许多情况下的可读性,调试和日志大小。可以在需要时生成SQL定时信息。

使用hibernate的日志记录,您的日志记录类似于:

 select bs0_.A_REF as A2_7_0_ from B bs0_ where  bs0_.other = 0 and bs0_.A_REF=?  
 TRACE 2011-08-  03 00:30:45,317 binding '123' to parameter: 1

对于带有大量参数的大查询,在手动对数据库执行查询之前替换所有绑定参数可能会很痛苦。

使用Pass through JDBC驱动程序,您的日志记录类似于:

select bs0_.A_REF as A2_7_0_ from B bs0_ where  bs0_.other = 0 and bs0_.A_REF=123  

所有绑定参数都已解析,您只需复制粘贴它即可在数据库上执行查询。

您可以将log4jdbc检查为良好的JDBC驱动程序 要关闭hibernate日志记录,请确保将配置文件中的hibernate.show_sql属性和所有与SQL相关的记录器设置为false。请参阅参考文档的Logging Configuration部分