小编典典

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

spring-boot

尽管已经使用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的日志(包括查询)发送到file
hibernate.log。但是我也想避免控制台中的查询,我认为这种查询应该在这种配置下发​​生。

我想念什么?


阅读 458

收藏
2020-05-30

共1个答案

小编典典

如果将设置hibernate.show_sqltrue,则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
2020-05-30