【发布时间】: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