【问题标题】:Hibernate logging too much informationHibernate 记录太多信息
【发布时间】:2011-08-06 00:14:09
【问题描述】:

我在 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语句和参数,别无其他。

【问题讨论】:

    标签: hibernate log4j logging


    【解决方案1】:

    您可以使用 Pass through Java JDBC 驱动程序代替真正冗长且不直观的休眠 SQL 日志记录,该驱动程序可以为其他 JDBC 驱动程序记录 SQL 和/或 JDBC calls

    通过 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
    

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

    通过 JDBC 驱动程序,您的日志记录类似于:

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

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

    您可以检查log4jdbc 是否已通过 JDBC 驱动程序。
    要关闭休眠日志记录,请务必将配置文件中的hibernate.show_sql 属性和所有与 SQL 相关的记录器设置为 false。请参阅参考文档的Logging Configuration 部分

    【讨论】:

    • 非常感谢 Joel.. 我听从了您的建议并使用了 log4jdbc 驱动程序并设置了此属性log4j.logger.jdbc.sqlonly = DEBUG 还有其他有用的属性吗?
    • 我将log4j.logger.jdbc.sqlonly=INFO DEBUG 设置为过于冗长,包括类名和行号,并且在使用时会造成额外的性能损失。如果在类路径中添加log4jdbc.properties文件并设置属性log4jdbc.dump.sql.maxlinelength=7000,就可以在控制台中一行一行的SQL语句。
    • @Joel.. 它对我不起作用.. 我在 log4jdbc.properties 文件中添加了这两行并将其放在 web-inf/classes log4jdbc.debug.stack.prefix = com.abcd log4jdbc.dump.sql.maxlinelength=7000.. sql 语句仍然在多行中并且第一个属性也不用于确定调用顺序
    • @rrkwells 如果它可以帮助我使用1.2beta2 版本并且jar log4jdbc4-1.2beta2.jarWEB-INF/lib 下。您可以尝试将其设置为-DSystem propery log4jdbc.dump.sql.maxlinelength=7000
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2011-01-09
    相关资源
    最近更新 更多