Hibernate Tips: How to Log SQL Statements and Their Parameters [Video]
Learn the answer to the question: How do you configure Hibernate so that it writes the executed SQL statements and used bind parameters to the log file?
Join the DZone community and get the full member experience.
Join For FreeHibernate Tips is a series of posts in which I describe a quick and easy solution for common Hibernate questions. If you have a question for a future Hibernate Tip, please leave a comment below.
Question
How do you configure Hibernate so that it writes the executed SQL statements and used bind parameters to the log file?
Solution
Hibernate uses two different log categories and log levels to log the executed SQL statements and their bind parameters:
- The SQL statements are written as
DEBUG
messages to the categoryorg.hibernate.SQL
. - The bind parameters are logged to the
org.hibernate.type.descriptor.sql
category with log levelTRACE
.
You can activate and deactivate them independently of each other in your log configuration.
The following code snippet shows an example of a log4j
configuration, which activates both of them:
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{HH:mm:ss,SSS} %-5p [%c] - %m%n
log4j.rootLogger=info, stdout
# basic log level for all messages
log4j.logger.org.hibernate=info
# SQL statements and parameters
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.type.descriptor.sql=trace
Hibernate then writes log messages like the following one to your log file:
17:34:50,353 DEBUG [org.hibernate.SQL] - select author0_.id as id1_0_, author0_.firstName as firstNam2_0_, author0_.lastName as lastName3_0_, author0_.version as version4_0_ from Author author0_ where author0_.id=1
17:34:50,362 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([id1_0_] : [BIGINT]) - [1]
17:34:50,373 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([firstNam2_0_] : [VARCHAR]) - [Joshua]
17:34:50,373 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([lastName3_0_] : [VARCHAR]) - [Bloch]
17:34:50,374 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([version4_0_] : [INTEGER]) - [0]
Further Reading and More Hibernate Tips
You can find more information about Hibernate logging features and my recommendation for a development and a production configuration (yes, you should use two different ones!) here.
And for more Hibernate recipes, check out my book Hibernate Tips: More than 70 solutions to common Hibernate problems.
Published at DZone with permission of Thorben Janssen, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments