如何在 Hibernate 日志中显示 SQL 参数? [复制]

Posted

技术标签:

【中文标题】如何在 Hibernate 日志中显示 SQL 参数? [复制]【英文标题】:How to show SQL parameters in Hibernate log? [duplicate] 【发布时间】:2013-03-03 18:03:51 【问题描述】:

在我的 hibernate.cfg.xml 中,我有以下内容:

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

在我的 log4j.xml 中,我有以下内容:

<logger name="org.hibernate" additivity="false">
    <level value="TRACE"/>
    <appender-ref ref="hbn_log"/>
</logger>

<category name="org.hibernate.SQL" additivity="false">
    <priority value="TRACE"/>
    <appender-ref ref="hbn_log"/>
</category>

<category name="org.hibernate.type" additivity="false">
    <priority value="TRACE"/>
    <appender-ref ref="hbn_log"/>
</category>

<logger name="org.hibernate.type.descriptor.sql.BasicBinder"> 
    <level value="TRACE"/>
    <appender-ref ref="hbn_log"/>
</logger>

<logger name="org.hibernate.event.def.DefaultLoadEventListener" additivity="true">
    <level value="all"/>
    <appender-ref ref="hbn_log"/>
</logger>

<logger name="org.hibernate.cache.ReadWriteCache" additivity="true">
   <level value="all"/>
   <appender-ref ref="hbn_log"/>
</logger>

<appender name="hbn_log" class="com.adventnet.management.log.NMSRollingFileAppender">
   <param name="File" value="logs/hbn.txt"/>
       <param name="MaxFileSize" value="1MB"/>
       <param name="MaxBackupIndex" value="10"/>
   <layout class="org.apache.log4j.PatternLayout">
                 <param name="ConversionPattern" value="[%ddd MMM yyyy HH:mm:ss:SSS] %-5c2: %m%n"/>
   </layout>
   <param name="Threshold" value="TRACE"/>
</appender>

在我的 stdout.txt 中,我可以看到它记录了 SQL 语句:

[13 Apr 2013 22:03:59:199] SYS_OUT: Hibernate: select this_.EMSID as EMSID195_0_, this_.COUNTER as COUNTER195_0_, this_.TIMESTAMP as TIMESTAMP195_0_, this_.UPDATETYPE as UPDATETYPE195_0_, this_.OBJECTTYPE as OBJECTTYPE195_0_, this_.OBJECTID as OBJECTID195_0_, this_.OBJECT as OBJECT195_0_ from WebNmsDB.UpdateData this_ where this_.EMSID=?

但我希望它也记录 SQL 的参数,但它没有显示它。

另一件事是 appender 被定义为记录到 hbn.txt,但是 SQL 语句被记录到 stdout.txt 而不是 hbn.txt。我不知道为什么会这样。

【问题讨论】:

【参考方案1】:

将此配置附加到您的 log4j.xml 中

<logger name="org.hibernate.type.descriptor.sql.BasicBinder"> 
    <level value="TRACE"/>
</logger>

别忘了检查 appender 的 Threadhold 级别。

【讨论】:

我将它添加到我的 log4j.xml 中,但仍然没有得到任何参数记录。 我还把 添加到了 appender 中,还是不行。 这非常适合我: 您可能需要告诉 Hibernate 您使用的日志管理器(log4j、slf4j),请参阅how。 您可以为log4j设置以下参数 "log4j.logger.org.hibernate.SQL=debug","log4j.logger.org.hibernate.type.descriptor.sql=trace" 请访问这里链接了解更多详情:- techpost360.blogspot.in/2016/10/…

以上是关于如何在 Hibernate 日志中显示 SQL 参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在使用hibernate的getHibernateTemplate()时怎么让控制台输出封装好的SQL? 怎么用日志打印出来?

Hibernate如何开启打印底层日志

如何将Hibernate生成的SQL语句打印到日志文件

如何将Hibernate生成的SQL语句打印到日志文件

如何从 Hibernate Criteria API 获取 SQL(*not* 用于日志记录)

Hibernate...如何进行数据库/SQL 查询?