Ich möchte SQL-Anweisungen in einer Datei protokollieren.
Ich habe die folgenden Eigenschaften inapplication.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
Wenn ich meine Anwendung ausführe
cmd>mvn spring-boot:run
Ich kann SQL-Anweisungen in der Konsole sehen, aber sie werden nicht in einer Datei app.log angezeigt. Die Datei enthält nur grundlegende Protokolle aus dem Frühjahr.
Was kann ich tun, um SQL-Anweisungen in der Protokolldatei anzuzeigen?
logging.level.org.hibernate.type=TRACE
Dies funktioniert auch für stdout:
So protokollieren Sie Werte:
Fügen Sie dies einfach hinzu
application.properties
.quelle
spring.jpa.properties.hibernate.type=trace
?
anstelle der Parameter. Sollte diese Lösung sie mir zeigen?Das funktioniert bei mir (YAML):
quelle
Benutzen Sie bitte:
quelle
logging.level.org.hibernate.SQL=DEBUG
machte es für mich arbeiten und fehlte für andere Antworten. Vielen Dank!Wenn Sie eine logback-spring.xml oder ähnliches haben, fügen Sie den folgenden Code hinzu
funktioniert bei mir.
So erhalten Sie auch Bindungsvariablen:
quelle
<appender-ref ref="FILE" />
Zu vermeidende Einstellungen
Sie sollten diese Einstellung nicht verwenden:
Das Problem dabei
show-sql
ist, dass die SQL-Anweisungen in der Konsole gedruckt werden, sodass es keine Möglichkeit gibt, sie zu filtern, wie Sie es normalerweise mit einem Protokollierungsframework tun würden.Verwenden der Protokollierung im Ruhezustand
Wenn Sie in Ihrer Protokollkonfigurationsdatei den folgenden Protokollierer hinzufügen:
Anschließend druckt Hibernate die SQL-Anweisungen, wenn der JDBC
PreparedStatement
erstellt wird. Aus diesem Grund wird die Anweisung mithilfe von Parameterplatzhaltern protokolliert:Wenn Sie die Bindungsparameterwerte protokollieren möchten, fügen Sie einfach den folgenden Logger hinzu:
Sobald Sie den
BasicBinder
Logger eingestellt haben, sehen Sie, dass auch die Bindungsparameterwerte protokolliert werden:Datenquellen-Proxy verwenden
Mit dem Datenquellen-Proxy können Sie den tatsächlichen JDBC
DataSource
als Proxy verwenden , wie in der folgenden Abbildung dargestellt:Sie können die
dataSource
Bean, die von Hibernate verwendet wird, wie folgt definieren:Beachten Sie, dass die
actualDataSource
muss die werdenDataSource
durch die definierte Verbindungspool Sie sind in Ihrer Anwendung verwenden.Nach dem Aktivieren
datasource-proxy
wird die SQl-Anweisung wie folgt protokolliert:quelle
Für den MS-SQL Server-Treiber (Microsoft SQL Server JDBC-Treiber).
versuchen Sie es mit:
in Ihrer application.properties-Datei.
Meine persönliche Präferenz ist es, Folgendes festzulegen:
Sie können diese Links als Referenz ansehen:
quelle
Laut Dokumentation ist es:
quelle
Die übersetzte akzeptierte Antwort auf YAML funktioniert für mich
quelle
logging.level.org.hibernate.SQL: TRACE
logging.level.org.hibernate.type.descriptor.sql.BasicBinder: TRACE
Wir können eine davon in der Datei application.properties verwenden:
oder
quelle
Wenn Sie die tatsächlichen Parameter anzeigen möchten, die zum Abfragen verwendet werden, können Sie diese verwenden
Beachten Sie dann, dass der tatsächliche Parameterwert als angezeigt wird
binding parameter......
quelle
Melden Sie sich bei der Standardausgabe an
Hinzufügen
application.properties
Dies ist der einfachste Weg, um die SQL-Abfragen zu drucken, obwohl die Parameter der vorbereiteten Anweisungen nicht protokolliert werden. Und es wird nicht empfohlen, da es kein optimiertes Protokollierungsframework ist.
Verwenden des Protokollierungsframeworks
Hinzufügen
application.properties
Durch Angabe der obigen Eigenschaften werden Protokolleinträge an den konfigurierten Protokoll-Appender gesendet, z. B. "Zurückmelden" oder "Protokoll4j".
quelle
Wenn Sie Probleme mit dieser Einstellung haben und sie manchmal und nicht zu anderen Zeiten zu funktionieren scheint, prüfen Sie, ob die Zeiten, in denen sie nicht funktioniert, bei Komponententests liegen.
Viele Benutzer deklarieren benutzerdefinierte Testzeit-Eigenschaften über die
@TestPropertySources
Anmerkung, die irgendwo in Ihrer Testvererbungshierarchie deklariert ist. Dadurch wird alles außer Kraft gesetzt, was Sie in Ihreapplication.properties
oder andere Einstellungen für die Produktionseigenschaften eingegeben haben, sodass die von Ihnen festgelegten Werte zur Testzeit effektiv ignoriert werden.quelle
Das Einfügen
spring.jpa.properties.hibernate.show_sql=true
von application.properties hat nicht immer geholfen.Sie können versuchen,
properties.put("hibernate.show_sql", "true");
die Eigenschaften der Datenbankkonfiguration zu erweitern.quelle
Sie müssen nur einstellen
quelle