Ich kann SQL-Anweisungen in der Konsole sehen, aber sie erscheinen nicht in einer Datei, app.log. Die Datei enthält nur grundlegende Protokolle von Spring.
Was muss ich tun, um SQL-Anweisungen in der Protokolldatei anzuzeigen?
Wenn Sie auch Werte protokollieren möchten: logging.level.org.hibernate.type=TRACE
– elysch
11. Juni 2016 um 0:48 Uhr
Dies protokolliert jedoch nur wenige Bindungswerte. Wie kann ich Werte aus der Kriterien-API protokollieren? Wenn ich Spezifikationen verwende, erhalte ich keine Ausgabe für gebundene Parameter, die mit dem CriteriaBuilder erstellt wurden.
– Josch
10. August 2016 um 5:48 Uhr
Was ist mit Leuten, die verwenden EclipseLink Anstatt von Hibernate ?
Fügen Sie dies einfach hinzu application.properties.
Wenn Sie auch Werte protokollieren möchten: spring.jpa.properties.hibernate.type=trace
– elysch
11. Juni 2016 um 0:48 Uhr
Dies schreibt nicht in die Protokolldatei, sondern in STDOUT
– Muhammad Hewedy
29. Juni 2016 um 8:34 Uhr
Ich sehe nur noch ? Anstelle der Parameter. Sollte diese Lösung sie mir zeigen?
– Adynack
2. Februar 2018 um 8:54 Uhr
spring.jpa.properties.hibernate.type=Trace wirkt sich nicht auf meine Protokolldatei aus ;(
– gstackoverflow
4. September 2018 um 16:54 Uhr
Das “type=trace” ist keine Federeigenschaft, daher funktioniert es nicht. Die unten angegebene Lösung stackoverflow.com/a/41594913/5107365 ist dafür die richtige.
Das Problem mit show-sql ist, dass die SQL-Anweisungen in der Konsole ausgegeben werden, sodass es keine Möglichkeit gibt, sie zu filtern, wie Sie es normalerweise mit einem Logging-Framework tun würden.
Hibernate-Protokollierung verwenden
In Ihrer Protokollkonfigurationsdatei, wenn Sie den folgenden Logger hinzufügen:
<logger name="org.hibernate.SQL" level="debug"/>
Dann druckt Hibernate die SQL-Anweisungen, wenn JDBC PreparedStatement geschaffen. Aus diesem Grund wird die Anweisung mit Parameterplatzhaltern protokolliert:
INSERT INTO post (title, version, id) VALUES (?, ?, ?)
Wenn Sie die Bindungsparameterwerte protokollieren möchten, fügen Sie einfach auch den folgenden Logger hinzu:
Sobald Sie die eingestellt haben BasicBinder logger, sehen Sie, dass auch die Bindungsparameterwerte protokolliert werden:
DEBUG [main]: o.h.SQL - insert into post (title, version, id) values (?, ?, ?)
TRACE [main]: o.h.t.d.s.BasicBinder - binding parameter [1] as [VARCHAR] - [High-Performance Java Persistence, part 1]
TRACE [main]: o.h.t.d.s.BasicBinder - binding parameter [2] as [INTEGER] - [0]
TRACE [main]: o.h.t.d.s.BasicBinder - binding parameter [3] as [BIGINT] - [1]
Datenquellen-Proxy verwenden
Das Datenquellen-Proxy Das OSS-Framework ermöglicht es Ihnen, das eigentliche JDBC zu proxieren DataSourcewie das folgende Diagramm zeigt:
Sie können die definieren dataSource Bean, die von Hibernate wie folgt verwendet wird:
@Bean
public DataSource dataSource(DataSource actualDataSource) {
SLF4JQueryLoggingListener loggingListener = new SLF4JQueryLoggingListener();
loggingListener.setQueryLogEntryCreator(new InlineQueryLogEntryCreator());
return ProxyDataSourceBuilder
.create(actualDataSource)
.name(DATA_SOURCE_PROXY_NAME)
.listener(loggingListener)
.build();
}
Beachten Sie, dass die actualDataSource muss das sein DataSource definiert durch die [connection pool][2] Sie in Ihrer Anwendung verwenden.
Als nächstes müssen Sie die einstellen net.ttddyy.dsproxy.listener Protokollebene zu debug in Ihrer Protokollierungs-Framework-Konfigurationsdatei. Wenn Sie beispielsweise Logback verwenden, können Sie den folgenden Logger hinzufügen:
Befolgen Sie die Anweisungen auf baeldung.com/sql-logging-spring-boot
– Lu55
4. Februar 2021 um 19:31 Uhr