无法阻止 Hibernate 将日志写入控制台(log4j.properties 可以)

Posted

技术标签:

【中文标题】无法阻止 Hibernate 将日志写入控制台(log4j.properties 可以)【英文标题】:Can't stop Hibernate from writing log to console (log4j.properties is ok) 【发布时间】:2010-01-16 12:48:28 【问题描述】:

我已经设置好了

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

我已禁用 log4j.properties 中的所有消息

但是 Hibernate 将所有查询和语句写入控制台。

【问题讨论】:

我遇到了同样的问题。我已经设置了 log4j.logger.org.hibernate=INFO 和 false,但我仍然将休眠 SQL 添加到我的日志文件中。我在我的项目中搜索了“show_sql”和“log4j”的所有内容以找到任何其他参考,但没有任何参考。还有其他方法可以打开休眠日志记录吗? 抱歉打扰了,但我错了——执行我提到的操作会删除所有 SQL 日志记录。我发现我正在使用的第 3 方库中硬编码了这一行:System.out.println(hql);哎呀。 Can't make hibernate stop showing SQL using Spring JPA Vendor Adapter的可能重复 【参考方案1】:

hibernate.show_sql 设置为true 告诉休眠将所有SQL 语句写入控制台。这是将日志类别org.hibernate.SQL 设置为调试的替代方法。

因此,即使您将此属性设置为 false,请确保您没有定义以下类别(或配置为使用控制台附加程序):

log4j.logger.org.hibernate.SQL=DEBUG

另外,请确保在实例化 Configuration 对象时不要以编程方式将 hibernate.show_sql 设置为 true。狩猎这样的东西:

Configuration cfg = new Configuration().configure().
    .setProperty("hibernate.show_sql", "true");

注意setProperty(String propertyName, String value) 将配置属性的全名作为第一个参数,即hibernate.show_sql,而不仅仅是show_sql

【讨论】:

@Pascal:请参阅我对问题的评论。你建议的一切,我都调查过了。您还有其他想法吗? 我使用 logback(加上 slf4j)并添加到我的 logback 配置文件中:&lt;logger name="org.hibernate.type" level="ALL" /&gt; &lt;logger name="org.hibernate.SQL" level="WARN" /&gt; &lt;logger name="org.hibernate" level="DEBUG" /&gt;【参考方案2】:

您好,我发现您也可以使用 log4j.properties 文件中的这两行来解决这个问题。

log4j.logger.org.hibernate = WARN
log4j.logger.org.hibernate = ERROR

【讨论】:

【参考方案3】:

您在 log4j.properties 中添加了类似的内容?

log4j.logger.org.hibernate = WARN

【讨论】:

【参考方案4】:

看起来很奇怪,但是当 Use Eclipse with JUnit Test 任务时,所有的输出仍然到控制台(在 Eclipse 控制台窗口中)。

但是当我使用 ant 命令进行单元测试时,控制台什么也没有。

【讨论】:

【参考方案5】:

如前所述,您需要先将hibernate.show_sql 设置为false。这将阻止休眠输出到控制台或 Tomcat 标准输出日志。

但为了将您的 sql 输出定向到另一个日志,请在 log4j.xml 文件中使用此代码:

<logger name="org.hibernate.SQL" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="hibernate"/>
</logger>

要保持正常的休眠日志级别(WARN / ERROR)到控制台,请在 log4j.xml 文件中使用此代码:

<category name="org.hibernate">
    <priority value="WARN" />
</category>

【讨论】:

【参考方案6】:

它很简单,只需将依赖项添加到您的 pom.xml 文件中

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>

它将禁用日志记录并添加放入 src/main/resources/log4j.properties 文件中

log4j.rootLogger=OFF

然后你可以随时使用它,如果你想在控制台上显示日志然后 On it 或 OFF

【讨论】:

以上是关于无法阻止 Hibernate 将日志写入控制台(log4j.properties 可以)的主要内容,如果未能解决你的问题,请参考以下文章

heroku 无法将数据写入 mlab

Hibernate4

AWS 事件总线无法将日志写入来自 AWS Lambda 的自定义日志组上的 CloudWatch

无法使用 Nlog 将日志写入 Azure

阻止写入标准输出

Serilog 不会将日志写入文件