Spring Bootアプリケーションは、次のようにLogbackを使用してHibernateの特定のロギングを構成したにもかかわらず、コンソールに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のログをファイルhibernate.log
に送信します。しかし、コンソールでのクエリも回避したいと思います。これは、この構成で発生するはずです。
何が欠けていますか?
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 );
}
}
したがって、コンソールにクエリを表示したくない場合は、hibernate.show_sql
をfalse
に設定するか、完全に削除して、無効にするだけです。 Spring Bootでは、これをapplication.properties
に追加するだけです。
spring.jpa.show-sql=false
あなたが設定したかもしれないが、Spring Boot JUnitテストでorg.hibernate.SQLをデバッグさせる可能性がある別の設定があることに気づいたことを共有したかっただけです
spring.jpa.show-sql=false
そして
spring.jpa.properties.hibernate.show_sql=false
...
設定した場合
debug=true
spring application * .propertiesファイルで!
これをtrueに設定すると、show-sql設定が上書きされ、trueに設定されます。
ブルグ
基本的に、2つのプロパティをfalseに設定する必要があります。
Spring bootを使用している場合は、Application.propertiesで次のように設定します。
spring.jpa.properties.hibernate.generate_statistics=false
spring.jpa.properties.hibernate.show_sql=false
そして、hibernate.cfg.xmlを使用している場合は、以下のように設定します
<property name="hibernate.generate_statistics">false</property>
<property name="show_sql">false</property>
私のアプリケーションはスプリングブートアプリケーションです。
私の場合、何らかの理由で、プロパティ 'spring.jpa.show-sql = false'が機能しませんでした。バインド値を持つsqlが、コンソール/ログにクエリを出力し続けるのがわかりました。
ルートレベルを以下のようなエラーに変更することで解決します
<root level="ERROR"> <appender-ref ref="STDOUT"/> </root>
ルートでログレベルをエラーに変更しますが、以下のように個別のロガーを使用して、情報モードでパッケージ/アプリケーションログを印刷できます。
<logger name="com.application.code" level="INFO"> <appender-ref ref="FILE"/> <appender-ref ref="ERR_FILE"/> </logger>
ここに置くと、誰かを助けるかもしれません。
ありがとう
上記のすべてを試しても問題が解決しない場合は、プロパティを設定してみてください。
logging.level.org.hibernate.SQL=OFF