无法避免使用 Spring Boot 和 Logback 将 SQL 休眠日志记录到控制台

2022-09-01 11:25:04

我的 Spring Boot 应用程序一直在控制台中显示 Hibernate 查询,尽管已使用 Logback 配置了 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

我错过了什么?


答案 1

如果将 设置为 ,Hibernate 将简单地将 SQL 语句打印到控制台(不要与 下面的日志记录混淆)。 负责记录 SQL 语句及其外观:hibernate.show_sqltrueorg.hibernate.SQLSqlStatementLoggerlogStatement

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 );
    }
}

因此,如果您不想在控制台上看到查询,只需将其设置为或完全删除它来禁用。在Spring Boot中,只需将其添加到您的:hibernate.show_sqlfalseapplication.properties

spring.jpa.show-sql=false

答案 2

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

spring.jpa.show-sql=false 

spring.jpa.properties.hibernate.show_sql=false

...

如果设置

debug=true

在您的弹簧应用程序*.属性文件中!

此设置为 true 将覆盖 show-sql 设置并将其设置为 true。

布格兹


推荐