Spring Data JPA を使ってデータアクセスする際に、以下のログを出力する方法を書いていきます。
バージョン
Spring Boot 3.0.x と 2.7.x では、ログ出力の設定が異なるので両方記載しています。
3.0.x の出力方法
Spring Boot の設定ファイルに以下の内容を追加します。
src/main/resources/application.properties
# SQLをログ出力 logging.level.org.hibernate.SQL=debug # SQLのバインドパラメーターをログ出力 logging.level.org.hibernate.type=trace logging.level.org.hibernate.orm.jdbc.bind=trace # SELECT文の結果をログ出力 logging.level.org.hibernate.orm.jdbc.extract=trace
詳細は、Spring Boot が依存する Hibernate のマニュアルに記載されていました。
Logging - Hibernate ORM 6.1 User Guide
2.7.x の出力方法
Spring Boot の設定ファイルに以下の内容を追加します。
src/main/resources/application.properties
# SQLをログ出力 logging.level.org.hibernate.SQL=debug # SQLのバインドパラメーターとSELECT文の結果をログ出力 logging.level.org.hibernate.type=trace logging.level.org.hibernate.type.descriptor.sql=trace
詳細は Hibernate のマニュアルに記載されていました。
Logging - Hibernate ORM 5.6 User Guide
2.7.x の補足
バインドパラメーターとSELECT文の結果を分けて出力したい場合は、以下のように設定しました。
# SQLをログ出力 logging.level.org.hibernate.SQL=debug # SQLのバインドパラメーターをログ出力 logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace # SELECT文の結果をログ出力 logging.level.org.hibernate.type.descriptor.sql.BasicExtractor=trace
※ この設定方法はマニュアルに記載されていません。
3.0.1 の動作確認
Spring Boot のアプリでログ出力を確認しました。古いバージョンのログとは、少し違う内容になっています。
... DEBUG ... org.hibernate.SQL : select s1_0.id,s1_0.create_time,s1_0.name,s1_0.update_time,s1_0.version from student s1_0 where s1_0.id=? ... TRACE ... org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [2] ... TRACE ... org.hibernate.orm.jdbc.extract : extracted value ([1] : [BIGINT]) - [2] ... TRACE ... org.hibernate.orm.jdbc.extract : extracted value ([2] : [TIMESTAMP]) - [2022-12-23 16:19:53.996101] ... TRACE ... org.hibernate.orm.jdbc.extract : extracted value ([3] : [VARCHAR]) - [Jhon Smith] ... TRACE ... org.hibernate.orm.jdbc.extract : extracted value ([4] : [TIMESTAMP]) - [2022-12-26 22:11:01.194852] ... TRACE ... org.hibernate.orm.jdbc.extract : extracted value ([5] : [BIGINT]) - [1]
2.7.7 の動作確認
Spring Boot のアプリでログ出力を確認しました。
... DEBUG ... org.hibernate.SQL : select student0_.id as id1_0_0_, student0_.create_time as create_t2_0_0_, student0_.update_time as update_t3_0_0_, student0_.name as name4_0_0_, student0_.version as version5_0_0_ from student student0_ where student0_.id=? ... TRACE ... o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [2] ... TRACE ... o.h.type.descriptor.sql.BasicExtractor : extracted value ([create_t2_0_0_] : [TIMESTAMP]) - [2022-12-23 16:19:53.996101] ... TRACE ... o.h.type.descriptor.sql.BasicExtractor : extracted value ([update_t3_0_0_] : [TIMESTAMP]) - [2022-12-26 22:11:01.194852] ... TRACE ... o.h.type.descriptor.sql.BasicExtractor : extracted value ([name4_0_0_] : [VARCHAR]) - [Jhon Smith] ... TRACE ... o.h.type.descriptor.sql.BasicExtractor : extracted value ([version5_0_0_] : [BIGINT]) - [1]