2016-04-08 46 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