无法避免使用Spring Boot和Logback将SQL登录到控制台

gar*_*560 12 java spring hibernate logback 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>
Run Code Online (Sandbox Code Playgroud)

它会将Hibernate的日志(包括查询)发送到文件hibernate.log.但我还想避免在控制台中进行查询,我认为应该使用此配置进行查询.

我错过了什么?

Ali*_*ani 13

如果你设置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 );
    }
}
Run Code Online (Sandbox Code Playgroud)

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

spring.jpa.show-sql=false
Run Code Online (Sandbox Code Playgroud)

  • 在 Spring Boot 中,如所问, spring.jpa.properties.hibernate.show_sql=false 是 Mahaveer Jangir 回答的需要设置为 false 的一个属性。 (3认同)

小智 7

我只是想分享一下我刚刚注意到的另一种设置,它可能导致org.hibernate.SQL在Spring Boot JUnit测试中调试。

spring.jpa.show-sql=false 
Run Code Online (Sandbox Code Playgroud)

spring.jpa.properties.hibernate.show_sql=false
Run Code Online (Sandbox Code Playgroud)

...

如果您设定

debug=true
Run Code Online (Sandbox Code Playgroud)

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

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

g


Mah*_*gir 5

基本上,您需要将2个属性设置为false。

如果您使用的是Spring boot,则在Application.properties中进行如下设置

spring.jpa.properties.hibernate.generate_statistics=false
spring.jpa.properties.hibernate.show_sql=false
Run Code Online (Sandbox Code Playgroud)

如果您使用的是hibernate.cfg.xml,请按照以下步骤进行设置

<property name="hibernate.generate_statistics">false</property>
<property name="show_sql">false</property>
Run Code Online (Sandbox Code Playgroud)


Spa*_*arm 5

如果有人尝试了以上所有方法但仍有问题,请尝试设置属性:

logging.level.org.hibernate.SQL=OFF
Run Code Online (Sandbox Code Playgroud)