【问题标题】:Hibernate SQL parameters loggingHibernate SQL 参数记录
【发布时间】:2016-12-20 19:50:11
【问题描述】:

更新

How to print a query string with parameter values when using 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 文件损坏。我所能得到的 - 写入控制台的 SQL 命令,但只能使用 hibernate.cfg.xml

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

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

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

正如我在网络上发现的那样——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>

【问题讨论】:

  • 我看到了该主题和许多其他主题,但那里发布的解决方案对我不起作用。我试图理解为什么。你认为我应该在我的问题中添加一些东西吗?你有什么不清楚的地方吗?
  • @Pavlo Ishwar Lal 回答了你

标签: java hibernate logging


【解决方案1】:

我也遇到了同样的问题。尝试了很多解决方案,但系统没有显示带有 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)上还有一些其他配置来显示参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2020-02-27
    • 2014-03-12
    相关资源
    最近更新 更多