Hibernate SQL参数日志记录

3

更新

在使用Hibernate时如何打印带参数值的查询字符串,其中包含被标记为正确答案的回答,但它来自2009年! Hibernate日志配置取决于版本。这写在了几行之后。我尝试了这个和很多其他的解决方案,但对我都不起作用。

如果有人能帮忙,请问我应该添加什么描述。谢谢。

更新结束

问题是我不能以可以显示所有SQL参数值的方式设置日志记录。请帮助我做到这一点。

我搜索了一下,发现应该设置日志属性org.hibernate.typeALL

我尝试在log4j.properties文件中进行设置:

log4j.logger.org.hibernate.type=ALL

我尝试在 log4j.xml 中进行设置。

   <logger name="org.hibernate.type">
       <level value="trace"/>
   </logger>

我知道log4j肯定会读取xml配置文件,因为如果我在log4j.xml文件中放入一些错误的标签,就会在日志中得到错误提示。

不幸的是,这并不起作用。可能是pom.xml文件已经损坏了。我所能得到的只有通过hibernate.cfg.xml将SQL命令写入控制台。

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

如果我在 log4j.xml 中设置这个 org.hibernate.SQL 属性,它就不起作用:

   <logger name="org.hibernate.SQL">
       <level value="debug"/>
   </logger>

根据我在网上找到的信息,Hibernate的日志设置取决于其版本。在我的项目中,我无法设置Hibernate的版本,但是可以在本地工作站上进行依赖项的调整。以下是来自我的pom.xml文件的相关数据:

    <!--hibernate -->        
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.1.8.Final</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>4.1.0.Final</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.7</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.7</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>3.2.0.Final</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>     
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.1.8.Final</version>
        <scope>compile</scope>
        <type>jar</type>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- Hibernate Spatial for mysql.  This will include Hibernate Spatial Core and JTS -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-spatial</artifactId>
        <version>4.0.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- custom type mappings for java 8 time classes -->
    <!--hibernate -->        
    <dependency>
        <groupId>ca.gfisystems</groupId>
        <artifactId>hibernate-utils</artifactId>
        <version>1.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- c3p0 used for postgresql connection -->
    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>
    <!-- hibernate c3p0 connection pooling -->        
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>4.1.8.Final</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- logback -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.3</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.1.3</version>
    </dependency>

可能是在Hibernate中打印带参数值的查询字符串的重复问题。 - jmehrens
我看了那个话题和许多其他话题,但是那里发布的解决方案对我不起作用。我正在尝试理解为什么。您认为我应该在我的问题中添加一些内容吗?有什么不清楚的地方吗? - P_M
@Pavlo,您已经收到了Ishwar Lal的回答。 - Ilyas Soomro
1个回答

3
我也曾遇到同样的问题。尝试了很多解决方案,但系统没有显示与SQL语句相关的参数。
最后我采取了以下步骤,解决了我的问题:
将log4j库的版本从1.2.16更改为1.2.11,进行测试。
在log4j.properties中添加以下行:
log4j.logger.org.hibernate=INFO
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE

在hibernate.cfg.xml文件中

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

然后这个问题就得到解决了。

我分析的主要问题是使用的库版本(1.2.16)。也许,在这个版本上有一些其他的配置(log4j - 1.2.16)可以显示参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接