In Spring boot, hibernate logs should be enabled to debug the database connection and SQL query execution. By default hibernates logs are disabled in spring boot application. The hibernate logs can be enabled using the spring boot configurations. There are different configuration parameters that logs different features of hibernate. For example, print query strings with or without parameter values, hibernate cache logs, hibernate transactions etc.

There are two ways to enable hibernate logs in the spring boot application. The JPA spring boot module will allow the logging of the underlying ORM tools. Since hibernate is the default ORM tool used for spring boot, JPA logs will enable hibernate logs. The second choice is to allow hibernate logs directly using the logger. The hibernate classes log the queries using the loggers.

Hibernate logs can be printed in the spring boot console window. Hibernate logs must be forwarded to a log file so that they can be accessed later. The configuration of the log file must be added along with the configuration of the hibernate log.



Default Hibernate Logs

If the spring boot jpa and mysql are configured in the spring boot framework, the logs will be printed at the start of the application by default. These logs will be seen when the hibernate module is initialised in the spring boot application.

2020-11-10 15:13:48.804  INFO 89641 --- [         task-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-11-10 15:13:48.841  INFO 89641 --- [         task-1] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.21.Final
2020-11-10 15:13:48.846  WARN 89641 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2020-11-10 15:13:49.025  INFO 89641 --- [         task-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-11-10 15:13:49.112  INFO 89641 --- [         task-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2020-11-10 15:13:49.317  INFO 89641 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-11-10 15:13:49.319  INFO 89641 --- [           main] DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories…
2020-11-10 15:13:49.556  INFO 89641 --- [         task-1] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-11-10 15:13:49.562  INFO 89641 --- [         task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-11-10 15:13:49.712  INFO 89641 --- [           main] DeferredRepositoryInitializationListener : Spring Data repositories initialized!


Enable Hibernate Log using JPA

The hibernate logs can be enabled using the below JPA configurations in the application.properties files. The first configuration enables the hibernate sql logs. The second configuration will beautify the sql query that reveals the user-friendly query format to be understood.

The JPA configuration will log the SQL queries. The parameterized query logs the query as it is. The values of the parameter will not be logged. This configuration would be used if the application deals with confidential data that should not be used.

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

hibernate logs

Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into employee (name, id) values (?, ?)

hibernate logs with formatted sql

Hibernate: 
    select
        next_val as id_val 
    from
        hibernate_sequence for update
            
Hibernate: 
    update
        hibernate_sequence 
    set
        next_val= ? 
    where
        next_val=?
Hibernate: 
    insert 
    into
        employee
        (name, id) 
    values
        (?, ?)


Enable Hibernate Log – SQL query with Parameter value

If the hibernate logger configuration will enable to log the sql query string with parameter values. The following configuration will enable the hibernate logs. The log will show the hibernate class from where the log is written.

The hibernate query will be printed using the first configuration. The second configuration will show all values of the parameters in the same order. These configurations will be used in the development and debug mode. These configurations are not recommended for use in the production environment or in applications dealing with sensitive data.

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Hibernate log

2020-11-10 15:40:24.582 DEBUG 92677 --- [nio-8080-exec-1] org.hibernate.SQL                        : select next_val as id_val from hibernate_sequence for update
2020-11-10 15:40:24.592 DEBUG 92677 --- [nio-8080-exec-1] org.hibernate.SQL                        : update hibernate_sequence set next_val= ? where next_val=?
2020-11-10 15:40:24.608 DEBUG 92677 --- [nio-8080-exec-1] org.hibernate.SQL                        : insert into employee (name, id) values (?, ?)
2020-11-10 15:40:24.610 TRACE 92677 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [test]
2020-11-10 15:40:24.611 TRACE 92677 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [BIGINT] - [1]


Enable Hibernate Log – Using JdbcTemplate

If the Jdbc template is used in the spring boot application to connect the database and run the database queries, t he following configuration should be enabled to log in the queries. Custom queries used with the Jdbc template will be logged in using this configuration.

application.properties

logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG
logging.level.org.springframework.jdbc.core.StatementCreatorUtils=TRACE


Enable Hibernate Log to File

By default, hibernate logs are printed in the spring boot console. Using the configuration below, hibernate logs can be moved to the files. Configuring the log file name would transfer all the log of the spring boot console to the file. The second configuration would remove logs from the console window.

application.properties

logging.file.name=hibernate_log_file_name.log
logging.pattern.console=

In the above spring boot configuration, all the log statements will be moved to the configured log file. you can not differentiate the hibernate log from the other log statements. If you want to log the hibernate logs in a different log file, the logbook.xml or underlying log configuration file must be used to configure the log file names in the spring boot application.



Leave a Reply