2016-04-08 80 views
4

我的春天啓動的應用程序一直顯示在控制檯Hibernate查詢儘管已經用的logback配置Hibernate的具體日誌與Spring引導和的logback安慰如下:無法避免Hibernate日誌SQL

<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。但我也想避免在控制檯中查詢,我認爲這應該與這種配置有關。

我錯過了什麼?

+0

是否啓用了'hibernate.show_sql'配置?如果是這樣,只是禁用它 –

回答

6

如果您將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); 
    } 
} 

所以,如果你不希望看到在控制檯上查詢,只需將其設置爲false或只是刪除它完全禁用hibernate.show_sql 。在春季啓動,只需添加到您的application.properties

spring.jpa.show-sql=false 
+1

並不認爲它可以如此簡單。謝謝 – garci560

+0

LOG.isDebugEnabled()意味着它也由記錄器配置控制,如logback – xiaoyifang

+0

我指向logToStdout部分 –

0

我只是想和大家分享,我只注意到有可能導致org.hibernate.SQL在春季啓動JUnit測試調試另一個設置,雖然你可能已設置

spring.jpa.show-sql=false 

spring.jpa.properties.hibernate.show_sql=false 

...

如果設置

debug=true 

在Spring應用程序的* .properties文件!

將其中一個設置爲true將覆蓋show-sql設置並將其設置爲true。

brgds