【问题标题】:Define Hibernate SQL logging from log4j从 log4j 定义 Hibernate SQL 日志记录
【发布时间】:2013-07-23 19:46:54
【问题描述】:

我喜欢在我的大多数项目的日志系统中使用 SLF4J(带有 log4j 绑定)。我第一次用 Hibernate 卷起袖子,发现可以通过在 hibernate.cfg.xml 文件中使用以下属性来启用/禁用 SQL 语句的打印(由 Hibernate 执行):

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

有没有办法在我的 log4j 配置 XML 中而不是在 Hibernate 配置中指定这个?我想将我所有的日志记录设置统一到一个配置文件中。

【问题讨论】:

  • 谢谢@Reimeus (+1) - 你能详细说明一下吗,尤其是当你说“...注定要运往 2 个不同的对象时。”?在我看来,如果show_sql 为真,那么 Hibernate 会将 SQL 语句记录到 STDOUT(我相信 - 但如果我错了,请纠正我)。因此,最好定义 STDOUT 从 slf4j/log4j 内部的位置,因为它们是我的日志记录机制,而show_sql 属于日志记录的域/领域。再次感谢!
  • 同意 SLF4J 不(也不应该)知道所记录内容的任何内容,但是集中式日志记录系统(如 log4j)的强项是能够说“嘿,获取所有 STDOUT 输出并将其发送到 myapplog.txt。”所以我想知道解决方案是否只是保持 show_sql 始终打开,然后让 log4j 确定如何处理 STDOUT?这是一个可行的解决方案吗?
  • 再次感谢@Reimeus (+1) - 最后一次跟进:您知道指示 Hibernate 动态打开/关闭 SQL 日志记录的方法吗?这样,如果我需要开始诊断会话(当然,以降低性能为代价),我可以公开一个 JMX Bean 并打开 SQL 日志记录。

标签: java hibernate logging log4j slf4j


【解决方案1】:

通常通过将以下记录器设置为 DEBUG(通过 log4j.properties 文件)来完成。你甚至不需要更改 hibernate.cfg.xml

log4j.logger.org.hibernate.SQL=DEBUG

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多