web-dev-qa-db-fra.com

Impossible d'éviter la mise en veille prolongée de la journalisation de SQL sur la console avec Spring Boot et Logback

Mon application Spring Boot affiche toujours les requêtes Hibernate dans la console malgré la configuration de la journalisation spécifique d'Hibernate avec Logback comme suit:

<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>

Il envoie les journaux d'Hibernate, y compris les requêtes, au fichier hibernate.log. Mais je voudrais également éviter les requêtes dans la console, qui, je pense, devraient se produire avec cette configuration.

Qu'est-ce que je rate?

16
garci560

Si vous définissez le hibernate.show_sql à true, Hibernate imprimera simplement l'instruction SQL sur la console (à ne pas confondre avec la journalisation sous org.hibernate.SQL). SqlStatementLogger est responsable de la journalisation des instructions SQL et son logStatement ressemble à:

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

Donc, si vous ne voulez pas voir les requêtes sur la console, désactivez simplement le hibernate.show_sql en le définissant sur false ou en le supprimant simplement. Dans Spring Boot, ajoutez simplement ceci à votre application.properties:

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

Je voulais juste partager que je viens de remarquer qu'il existe un autre paramètre qui pourrait provoquer le débogage org.hibernate.SQL dans les tests Spring Boot JUnit, bien que vous ayez peut-être défini

spring.jpa.show-sql=false 

et

spring.jpa.properties.hibernate.show_sql=false

...

Si vous définissez

debug=true

dans votre fichier Spring application * .properties!

Celui-ci défini sur true remplacera le paramètre show-sql et le définira sur true.

Brgds

8
eztup

Vous devez essentiellement définir 2 propriétés sur false.

Si vous utilisez Spring Boot, configurez-le dans Application.properties comme ci-dessous

spring.jpa.properties.hibernate.generate_statistics=false
spring.jpa.properties.hibernate.show_sql=false

Et si vous utilisez hibernate.cfg.xml, alors configurez comme ci-dessous

<property name="hibernate.generate_statistics">false</property>
<property name="show_sql">false</property>
6
Mahaveer Jangir

Mon application est à démarrage rapide,

Pour une raison quelconque, dans mon cas, la propriété 'spring.jpa.show-sql = false' ne fonctionnait pas. Je pouvais voir le sql avec les valeurs de liaison continuer à imprimer les requêtes dans la console/log.

Il est résolu en modifiant le niveau racine en erreur comme ci-dessous

<root level="ERROR"> <appender-ref ref="STDOUT"/> </root>

Bien que nous changions le niveau de journal en erreur à la racine, nous pouvons toujours imprimer nos journaux de package/application en mode info en utilisant les enregistreurs séparés comme ci-dessous

<logger name="com.application.code" level="INFO"> <appender-ref ref="FILE"/> <appender-ref ref="ERR_FILE"/> </logger>

mettre ici pour aider quelqu'un.

Merci

0
Ethiraj

Si quelqu'un a essayé tout ce qui précède et a toujours des problèmes, essayez de définir la propriété:

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