我在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语句和参数而不是别的。
答案 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部分