Je souhaite enregistrer les instructions SQL dans un fichier.
J'ai les propriétés suivantes dansapplication.properties
spring.datasource.url=...
spring.datasource.username=user
spring.datasource.password=1234
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
security.ignored=true
security.basic.enabled=false
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=INFO
logging.file=c:/temp/my-log/app.log
Quand j'exécute mon application
cmd>mvn spring-boot:run
Je peux voir les instructions SQL dans la console, mais elles n'apparaissent pas dans un fichier app.log. Le fichier contient uniquement les journaux de base du printemps.
Que dois-je faire pour voir les instructions SQL dans le fichier journal?
logging.level.org.hibernate.type=TRACE
Cela fonctionne aussi pour stdout:
Pour enregistrer des valeurs:
Ajoutez simplement ceci à
application.properties
.la source
spring.jpa.properties.hibernate.type=trace
?
place des paramètres. Cette solution était-elle censée me les montrer?Cela fonctionne pour moi (YAML):
la source
Veuillez utiliser:
la source
logging.level.org.hibernate.SQL=DEBUG
fait fonctionner pour moi et manquait pour d'autres réponses. Merci!si vous avez un logback-spring.xml ou quelque chose comme ça, ajoutez-y le code suivant
travaille pour moi.
Pour obtenir également des variables de liaison:
la source
<appender-ref ref="FILE" />
Paramètres à éviter
Vous ne devez pas utiliser ce paramètre:
Le problème
show-sql
est que les instructions SQL sont imprimées dans la console, il n'y a donc aucun moyen de les filtrer, comme vous le feriez normalement avec un cadre de journalisation.Utilisation de la journalisation Hibernate
Dans votre fichier de configuration de journal, si vous ajoutez l'enregistreur suivant:
Ensuite, Hibernate imprimera les instructions SQL lors de la création du JDBC
PreparedStatement
. C'est pourquoi l'instruction sera enregistrée à l'aide des espaces réservés de paramètre:Si vous souhaitez enregistrer les valeurs des paramètres de liaison, ajoutez simplement également l'enregistreur suivant:
Une fois que vous avez défini l'
BasicBinder
enregistreur, vous verrez que les valeurs des paramètres de liaison sont également enregistrées:Utilisation de proxy de source de données
Le proxy de source de données vous permet de proxy le JDBC réel
DataSource
, comme illustré par le diagramme suivant:Vous pouvez définir le
dataSource
bean qui sera utilisé par Hibernate comme suit:Notez que le
actualDataSource
doit êtreDataSource
défini par le pool de connexions que vous utilisez dans votre application.Une fois que vous l'activez
datasource-proxy
, l'instruction SQl va être enregistrée comme suit:la source
Pour le pilote de serveur MS-SQL (pilote JDBC Microsoft SQL Server).
essayez d'utiliser:
dans votre fichier application.properties.
Ma préférence personnelle est de définir:
Vous pouvez consulter ces liens pour référence:
la source
Selon la documentation, c'est:
la source
Réponse acceptée traduite à YAML fonctionne pour moi
la source
logging.level.org.hibernate.SQL: TRACE
logging.level.org.hibernate.type.descriptor.sql.BasicBinder: TRACE
Nous pouvons utiliser n'importe lequel de ces fichiers dans le fichier application.properties :
ou
la source
Si vous souhaitez afficher les paramètres réels utilisés pour interroger, vous pouvez utiliser
Notez ensuite que la valeur réelle du paramètre est affichée comme
binding parameter......
la source
Connectez-vous à la sortie standard
Ajouter à
application.properties
C'est le moyen le plus simple d'imprimer les requêtes SQL, bien qu'il ne consigne pas les paramètres des instructions préparées. Et ce n'est pas recommandé car ce n'est pas le cas du cadre de journalisation optimisé.
Utilisation de la structure de journalisation
Ajouter à
application.properties
En spécifiant les propriétés ci-dessus, les entrées de journaux seront envoyées à l'appendice de journal configuré tel que log-back ou log4j.
la source
Si vous rencontrez des problèmes avec ce paramètre et qu'il semble fonctionner parfois et pas à d'autres moments - vérifiez si les moments où cela ne fonctionne pas sont pendant les tests unitaires.
De nombreuses personnes déclarent des propriétés de temps de test personnalisées via l'
@TestPropertySources
annotation déclarée quelque part dans votre hiérarchie d'héritage de test. Cela remplacera tout ce que vous mettez dans votreapplication.properties
ou dans d'autres paramètres de propriétés de production afin que les valeurs que vous définissez soient effectivement ignorées au moment du test.la source
La mise
spring.jpa.properties.hibernate.show_sql=true
en application.properties n'a pas toujours aidé.Vous pouvez essayer d'ajouter
properties.put("hibernate.show_sql", "true");
aux propriétés de la configuration de la base de données.la source
Vous avez juste besoin de régler
la source