Spring BootでHibernateのSQLログを記録する方法


  1. Hibernateのログレベルを設定する方法: Hibernateは、内部のSQL操作を記録するためにロギングフレームワークを使用します。Spring BootでHibernateのログレベルを設定するには、以下の手順を実行します。

application.propertiesファイルに以下の設定を追加します:

# Hibernateのログレベルを設定
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

この設定により、HibernateはSQLクエリとバインドパラメータの詳細なログを出力します。

  1. Spring Bootの統合ログ設定を使用する方法: Spring Bootでは、統合ログ設定を使用してアプリケーション全体のログ出力を制御できます。以下の手順で統合ログ設定を使用してHibernateのSQLログを有効にします。

application.propertiesファイルに以下の設定を追加します:

# 統合ログ設定を使用してHibernateのSQLログを有効にする
logging.level.root=INFO
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

これにより、HibernateのSQLログが出力されますが、他のログも出力されることに注意してください。

  1. 自前のロギングインターセプターを作成する方法: Spring Bootでは、自前のロギングインターセプターを作成してHibernateのSQLログを記録することもできます。以下に例を示します。
import org.hibernate.resource.jdbc.spi.StatementInspector;
public class SqlLoggingInterceptor implements StatementInspector {
    @Override
    public String inspect(String sql) {
        // SQLログを記録する処理を追加
        System.out.println("SQLログ: " + sql);
        return sql;
    }
}

Hibernateのセッションファクトリを構成する際に、作成したインターセプターを登録します。

@Configuration
@EnableTransactionManagement
public class HibernateConfig {
    @Autowired
    private EntityManagerFactory entityManagerFactory;
    @PostConstruct
    public void init() {
        SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
        sessionFactory.getSessionFactoryOptions().setStatementInspector(new SqlLoggingInterceptor());
    }
}

これにより、HibernateのSQLクエリが自前のロギングインターセプターによって記録されます。

以上の方法を使用して、Spring BootとHibernateでSQLログを記録することができます。これにより、アプリケーションのパフォーマンスチューニングやデバッグに役立ちます。