web-dev-qa-db-ja.com

Spring BootとLogbackを使用してコンソールにSQLを休止状態で記録することを回避できない

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に送信します。しかし、コンソールでのクエリも回避したいと思います。これは、この構成で発生するはずです。

何が欠けていますか?

16
garci560

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 );
    }
}

したがって、コンソールにクエリを表示したくない場合は、hibernate.show_sqlfalseに設定するか、完全に削除して、無効にするだけです。 Spring Bootでは、これをapplication.propertiesに追加するだけです。

spring.jpa.show-sql=false
17
Ali Dehghani

あなたが設定したかもしれないが、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に設定されます。

ブルグ

8
eztup

基本的に、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>
6
Mahaveer Jangir

私のアプリケーションはスプリングブートアプリケーションです。

私の場合、何らかの理由で、プロパティ '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>

ここに置くと、誰かを助けるかもしれません。

ありがとう

0
Ethiraj

上記のすべてを試しても問題が解決しない場合は、プロパティを設定してみてください。

logging.level.org.hibernate.SQL=OFF
0
Sparm