无法避免休眠记录 SQL 以使用 Spring Boot 和 Logback 进行控制台

新手上路,请多包涵

尽管使用 Logback 配置了 Hibernate 的特定日志记录,但我的 Spring Boot 应用程序仍然在控制台中显示 Hibernate 查询,如下所示:

 <appender name="HIBERNATE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGDIR}/hibernate.log</file>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOGDIR}/hibernate.log.%d</fileNamePattern>
    </rollingPolicy>
</appender>

<logger name="org.hibernate" additivity="false">
    <appender-ref ref="HIBERNATE"/>
</logger>

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

<logger name="org.hibernate.type.descriptor.sql" additivity="false">
    <appender-ref ref="HIBERNATE"/>
</logger>

它确实将 Hibernate 的日志(包括查询)发送到文件 hibernate.log 。但我也想避免控制台中的查询,我认为这种配置应该发生。

我错过了什么?

原文由 garci560 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 491
2 个回答

如果将 hibernate.show_sql 设置为 true ,Hibernate 将简单地将 SQL 语句打印到控制台(不要与 org.hibernate.SQL 下的日志记录混淆)。 SqlStatementLogger 负责记录 SQL 语句及其 logStatement 看起来像:

 public void logStatement(String statement, Formatter formatter) {
    if ( format ) {
        if ( logToStdout || LOG.isDebugEnabled() ) {
            statement = formatter.format( statement );
        }
    }
    LOG.debug( statement );
    if ( logToStdout ) {
        System.out.println( "Hibernate: " + statement );
    }
}

因此,如果您不想在控制台上看到查询,只需将 hibernate.show_sql 设置为 false 或将其完全删除即可。在 Spring Boot 中,只需将其添加到您的 application.properties

 spring.jpa.show-sql=false

原文由 Ali Dehghani 发布,翻译遵循 CC BY-SA 3.0 许可协议

我只是想分享一下,我刚刚注意到还有另一个设置可能会导致 org.hibernate.SQL 在 Spring Boot JUnit 测试中进行调试,尽管您可能已经设置了

spring.jpa.show-sql=false

spring.jpa.properties.hibernate.show_sql=false

如果你设置

debug=true

在你的 Spring application*.properties 文件中!

这一项设置为 true 将覆盖 show-sql 设置并将其设置为 true。

原文由 eztup 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题