尽管已经使用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。但是我也想避免控制台中的查询,我认为这种查询应该在这种配置下发生。
hibernate.log
我想念什么?
如果将设置hibernate.show_sql为true,则Hibernate只会将SQL语句输出到控制台(不要与记录下的混淆org.hibernate.SQL)。SqlStatementLogger负责记录SQL语句,其logStatement外观类似于:
hibernate.show_sql
true
org.hibernate.SQL
SqlStatementLogger
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:
false
application.properties
spring.jpa.show-sql=false