So zeigen Sie die Werte für den Ruhezustand von SQL-Parametern an - Log4j

Anzeigen der SQL-Parameterwerte im Ruhezustand - Log4j

Problem

Der Ruhezustand verfügt über eine grundlegende Protokollierungsfunktion zum Anzeigen der von SQL generierten Anweisung mit der Konfigurationseigenschaftshow_sql.

Hibernate: INSERT INTO example.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME)
VALUES (?, ?, ?, ?, ?, ?)

Für das Debuggen reicht dies jedoch nicht aus, da die Hibernate-SQL-Parameterwerte fehlen.

Lösung - Log4j

Log4J ist erforderlich, um den tatsächlichen Wert des Hibernate-SQL-Parameters anzuzeigen.

1. Konfigurieren Sie das Log4j im Ruhezustand

Folgen Sie diesem Artikel zuconfigure Log4j in Hibernate

2. Ändern Sie die Protokollebene

Ändern Sie die Log4j-Eigenschaftendatei und ändern Sie die Protokollebene in der Eigenschaft "log4j.logger.org.hibernate.type" in "Debug" oder "Trace".

Datei: log4j.properties

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Root logger option
log4j.rootLogger=INFO, stdout

# Hibernate logging options (INFO only shows startup messages)
log4j.logger.org.hibernate=INFO

# Log JDBC bind parameter runtime arguments
log4j.logger.org.hibernate.type=trace

3. Done

Die realen Parameterwerte für den Ruhezustand werden jetzt angezeigt

Ausgabe…

Hibernate: INSERT INTO example.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME)
VALUES (?, ?, ?, ?, ?, ?)
13:33:07,253 DEBUG FloatType:133 - binding '10.0' to parameter: 1
13:33:07,253 DEBUG FloatType:133 - binding '1.1' to parameter: 2
13:33:07,253 DEBUG DateType:133 - binding '30 December 2009' to parameter: 3
13:33:07,269 DEBUG FloatType:133 - binding '1.2' to parameter: 4
13:33:07,269 DEBUG IntegerType:133 - binding '11' to parameter: 5
13:33:07,269 DEBUG LongType:133 - binding '1000000' to parameter: 6

Note
Wenn diese Protokollierung immer noch nicht detailliert genug ist, um das SQL-Problem zu beheben, können Sie die P6Spy-Bibliothek verwenden, um dieexact SQL statement zu protokollieren, die an die Datenbank gesendet werden. Überprüfen Sie diesen Artikel -How to display hibernate sql parameter values with P6Spy