【问题标题】:Hibernate 4.3 show SQL parametersHibernate 4.3 显示 SQL 参数
【发布时间】:2014-03-12 08:04:20
【问题描述】:

我将 log4j2 与 slf4j 和 hibernate 4.3.1 一起使用。我无法显示 SQL 查询的参数。我没有发现无论如何要显示这些(SQL 查询很好地显示但没有参数)。这是我在 persistence.xml 中指定的内容:

<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="xxxxx" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <properties>
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.use_sql_comments" value="true"/>
        <property name="hibernate.query.factory_class"
            value="org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory" />
        <property name="max_fetch_depth" value="2" />
        <property name="hibernate.jdbc.batch_size" value="100" />
    </properties>
</persistence-unit>

我已经在我的 log4j2.xml 中定义了这个:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG" verbose="true">
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%m%n" />
        </Console>
        <File name="MyFile" fileName="test.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="MyFile" />
        </logger>
        <logger name="org.hibernate.type" level="TRACE" additivity="false">
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="MyFile" />
        </logger>
        <Root level="TRACE">
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="MyFile" />
        </Root>
    </Loggers>
</Configuration>

【问题讨论】:

  • 不是。我已经测试了提出的解决方案,但它不起作用。我认为它与hibernate的版本有关。这是我在 hibernate 文档中找到的内容:“日志记录完全过时。Hibernate 从 4.0 开始使用 JBoss 日志记录。当我们将此内容迁移到开发人员指南时,这将得到记录。”
  • 请根据该 SO 问题中的提示使用您的日志记录配置更新您的问题。 JBoss Logging 只是其他日志框架的一个外观,它在内部是类似于 SLF4J 提供的 jboss 日志框架。
  • true 不工作?

标签: java hibernate logging slf4j log4j2


【解决方案1】:
<!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

【讨论】:

  • 他的例子中有show_sql,这显然不是这里要问的......
【解决方案2】:

首先,确保类路径中有 log4j-core-2.0、log4j-api-2.0 和 log4j-1.2-api-2.0 jar。

接下来,JBoss 对 Log4J2 的支持是最近才出现的。您可能需要 JBoss Logging 3.1.4 才能使用 Log4J2(请参阅JBLOGGING-94)。从 JBoss Logging 3.2 开始,性能将得到改进(请参阅 JBLOGGING-95),您可以省略 log4j-1.2-api-2.0 桥接 jar。

请注意当前的 JBoss-Logging Beta1 (3.2.0.Beta1) 在记录时有一个 NPE:JBLOGGING-107。因此,可能有必要通过org.jboss.logging.provider 系统属性(参见 org.jboss.logging.LoggerProviders)告诉 hibernate 使用 slf4j API。

【讨论】:

    猜你喜欢
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2011-01-27
    • 2011-02-01
    • 2023-04-02
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多