Spring BootからHibernate/JPA SQLステートメントを表示する

Spring BootからのHibernate / JPA SQLステートメントの表示

1. 概要

SpringJDBCおよびJPAは、ネイティブJDBC APIを抽象化して、開発者がネイティブSQLクエリを廃止できるようにします。 ただし、多くの場合、これらの自動生成されたSQLクエリとデバッグ目的で実行された順序を確認する必要があります。

このクイックチュートリアルでは、SpringBootでこれらのSQLクエリをログに記録するさまざまな方法を見ていきます。

2. JPAクエリのロギング

2.1. 標準出力へ

最も簡単な方法は、クエリを標準出力にダンプすることです。application.propertiesに以下を追加します。

spring.jpa.show-sql=true

SQLを美化またはきれいに印刷するために、次を追加できます。

spring.jpa.properties.hibernate.format_sql=true

これは非常に単純ですが、it’s not recommendedは、ロギングフレームワークを最適化せずに、すべてを標準出力に直接アンロードするためです。

さらに、it doesn’t log the parameters of prepared statements.

2.2. ロガー経由

次に、プロパティファイルでロガーを構成してSQLステートメントをログに記録する方法を見てみましょう。

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

最初の行はSQLクエリを記録し、2番目のステートメントは準備されたステートメントパラメーターを記録します。

pretty printプロパティもこの構成で機能します。

これらのプロパティを設定することにより、logs will be sent to the configured appender。 デフォルトでは、Spring Bootは標準のoutアペンダーでlogbackを使用します。

3. JdbcTemplateクエリのログ

JdbcTemplateを使用するときにステートメントのログを構成するには、次のプロパティが必要です。

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

JPAロギング構成と同様に、最初の行はステートメントのロギング用であり、2行目は準備済みステートメントのパラメーターのロギング用です。

4. 仕組み

SQLステートメントを生成してパラメータを設定するThe Spring / Hibernate classes,already contain the code for logging them

ただし、これらのログステートメントのレベルはそれぞれDEBUGTRACEに設定されており、Spring BootのデフォルトレベルであるINFOよりも低くなっています。

これらのプロパティを追加することにより、これらのロガーを必要なレベルに設定するだけです。

5. 結論

この短い記事では、SpringBootでSQLクエリをログに記録する方法について説明しました。

configure multiple appendersを選択した場合、SQLステートメントと他のログステートメントを異なるログファイルに分割して、状況をクリーンに保つこともできます。