【问题标题】:hibernate 4 log4j view query paramshibernate 4 log4j 查看查询参数
【发布时间】:2014-12-16 12:53:16
【问题描述】:

我有一个使用 hibernate (JPA) 和 JSF 构建的 glassfish 4 上托管的网络应用程序,我想查看查询参数。
前段时间我可以看到这些参数,但我猜当我从休眠 3.x 切换到 4.x 时,日志功能消失了。
所以我在我的 persistence.xml 中有:

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

在我的 log4j.properties 中:

log4j.logger.org.hibernate=DEBUG
log4j.logger.org.hibernate.jdbc=trace
log4j.logger.org.hibernate.type= trace

事实上,我可以看到查询,但我看到的不是参数,而是问号。
我已经阅读了一些关于 hibernate4 使用 jboss 日志的事实,我已经添加了这个:

-Dorg.jboss.logging.provider=log4j

到我在 glassfish 中的 jvm 参数,但仍然没有运气。 有什么想法吗?

【问题讨论】:

标签: java hibernate jpa orm log4j


【解决方案1】:

在您的实际数据源前面尝试setting up your application 给您datasource-proxy

datasource-proxy 可以很好地拦截所有查询和日志参数。我在on-line Hibernate training material 的所有示例中都使用了这种日志记录方法,您也可以在GitHub 上查看配置。

Query:{[
select
    product0_.id as id1_18_1_,
    product0_.code as code2_18_1_,
    product0_.company_id as company_6_18_1_,
    product0_.importer_id as importer7_18_1_,
    product0_.name as name3_18_1_,
    product0_.quantity as quantity4_18_1_,
    product0_.version as version5_18_1_,
    company1_.id as id1_6_0_,
    company1_.name as name2_6_0_
from Product product0_
inner join Company company1_ on product0_.company_id=company1_.id
where product0_.id=?][1]

您将在方括号之间找到 PreparedStatament 参数。它甚至在调用过程和函数时也有效。

【讨论】:

  • 感谢您的解决方案,如果我无法以“更经典”的方式解决它,我将回退到此。
  • 尝试在加载 Log4j 配置的 LoggerManager 中添加一个断点。这样你可以确保你的配置被加载,而不是来自其他 jar 的其他 log4j.xml 文件。
  • 加载的文件是正确的,就好像我在其中更改了某些内容一样,它反映了记录器的行为。我想作为最后的手段,我会使用一些代理数据源。
  • 我认为您还应该在 Hibernate 中填写一个错误并提供一个测试用例来复制它。
【解决方案2】:

Glassfish 管理控制台 -> 配置 -> 服务器配置 -> 记录器设置 -> 日志级别 -> 添加记录器 -> org.hibernate.type : FINEST

来源:https://cumacakmak.wordpress.com/2015/01/18/glassfish-hibernate-binding-parameters-easy-way/

【讨论】:

    猜你喜欢
    • 2013-06-19
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2018-01-10
    • 2022-01-23
    • 2012-05-25
    • 1970-01-01
    相关资源
    最近更新 更多