在hibernate中包含log4j属性文件,以显示带有值而不是问号的查询

时间:2013-09-05 11:17:03

标签: java hibernate log4j

我有crearte log4j.properties 文件,如下所示:

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug

log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE

有人可以帮助我将其包含在hibernate.cfg.xml文件中吗?对不起,我实际上不知道log4j是如何工作的。我创建此项以使用value而不是?显示我的hibernate查询,但仍显示?没有任何更改,因此我需要进一步继续?

我从这里Hibernate show real SQL

参考了

8 个答案:

答案 0 :(得分:13)

hibernate.cfg.xml中的“show_sql”属性会将查询直接打印到控制台。

Log4j允许在从控制台到文件到网络端口到数据库的任何位置记录输出。 但是你所拥有的简单配置也应该在控制台上打印。因此,首先删除show_sql属性以查看Log4j是否在控制台上放置任何内容。

如果这不起作用,则表明Log4j配置不正确。如果你正在使用hibernate> 3.5,它使用slf4j api,它默认使用logback而不是log4j。 您可以通过从类路径中删除logback jar并轻松切换到log4j,然后添加slf4j-log4j12.jar和log4j.jar。

Log4j跟踪还使用'?'打印查询,但它也打印参数绑定,即'?'将由数据库驱动程序或服务器替换。

答案 1 :(得分:3)

请根据您的版本参考hibernate参考。这是3.3 Link

编辑: -

  1. 要设置日志记录,您需要使用slf4j-api.jar classpath与jar文件一起用于首选绑定 - 在Log4J的情况下为slf4j-log4j12.jar。
  2. 将log4j.properties文件放入类路径中。分发示例属性文件 在src /目录中使用Hibernate。
  3. 启用以下日志4j类别。

    org.hibernate.SQL   Log all SQL DML statements as they are executed
    
    org.hibernate.type  Log all JDBC parameters
    

答案 2 :(得分:2)

在大多数情况下,在应用程序的类路径中包含log4j.properties就足够了。

请参阅How to initialize log4j properly?

有问题的链接suggests你应该在不同的日志语句中查找sql​​文本中绑定的sql param值,如下所示: TRACE [BasicBinder] binding parameter [1] as [VARCHAR] - john doe

但我建议坚持使用log4jdbc。它使用起来非常简单。并且它能够在打印的sql文本中内联查询参数值。

答案 3 :(得分:2)

另外添加

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>

你的问题将得到解决。

答案 4 :(得分:0)

无需添加hibernate.cfg.xml,只需将其放入classpath并按照此链接中提到的步骤操作即可。 请参阅此链接: - http://makecodeeasy.blogspot.in/2013/03/logger-in-spring-web-application.html

答案 5 :(得分:0)

您无法内联打印值。 Hibernate总会打印出来的?记录查询时在DEBUG级别记录的org.hibernate.type输出显示了用于替换这些问号的值和类型。

答案 6 :(得分:0)

我喜欢使用jdbcdslog代理进行sql日志记录远远超过hibernate日志记录。

Log SQL that is communicated with the database

答案 7 :(得分:0)

在我的情况下,不是hibernate.cfg.xml ,它是 log4j.xml 文件,其中我放了@jdev给出的代码

&LT; property name =“show_sql”&gt; true 显示SQL查询

&LT; property name =“format_sql”&gt; true 格式化控制台上显示的查询

&LT; property name =“use_sql_comments”&gt; true 评论将添加到查询中

如果您的项目有1000个查询打印到控制台,请使其他人错误:     &LT; property name =“show_sql”&gt; true     &LT; property name =“format_sql”&gt; false     &LT; property name =“use_sql_comments”&gt; false

或者将 appender 写入我在项目中完成的log4j.xml,只是将所有SQL查询写在这里指定的单独文本文件中: Configuring Hibernate logging using Log4j XML config file?