web-dev-qa-db-ja.com

HibernateでDBトランザクションの開始と完了をログに記録する方法

sql_show = true

hibernateのこのプロパティは、実行されるSQLを出力しますが、トランザクション期間を追跡し、どのトランザクションで実行されるクエリを確認できるように、begin transactionステートメントとcomplete transactionステートメントも確認したいと思います。

グーグルはそれを明らかにします

log4j.logger.org.hibernate.SQL = DEBUG, defaultAppender
log4j.logger.org.hibernate.type = DEBUG, defaultAppender
log4j.logger.org.hibernate.transaction=DEBUG, defaultAppender

トランザクションレベルのデータも表示されます。しかし、そうではありません。

さらに調査して、休止状態のコードを調べて、クラス名を見つけました

org.hibernate.ejb.TransactionImpl

このクラスにはbeginメソッドとcompleteメソッドがありますが、このメソッドは何もログに記録しません。

hibernateでトランザクションレベル情報を表示する方法についてのアドバイスはありますか?
Hibernate2.2を使用しています

14
Bhuvan

Hibernate5の場合

  • SLF4Jロギングの場合:

    <logger name="org.hibernate.engine.transaction.internal.TransactionImpl" level="debug"/>
    
  • Log4jの場合:

     <logger name="org.hibernate.engine.transaction.internal.TransactionImpl">
          <level value="DEBUG"/>
     </logger>
    

Hibernate4の場合

次のクラスでは、ログのしきい値をDEBUGに設定する必要があります。

  1. JDBCトランザクションの場合(例:RESOURCE_LOCAL)

    • SLF4Jロギングの場合:

      <logger name="org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction" level="debug"/>
      
    • Log4jの場合:

      <logger name="org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction">
         <level value="DEBUG"/>
      </logger>
      
  2. JTAトランザクションの場合

    • SLF4Jロギングの場合:

      <logger name="org.hibernate.engine.transaction.internal.jta.JtaTransaction" level="debug"/>
      
    • Log4jの場合:

      <logger name="org.hibernate.engine.transaction.internal.jta.JtaTransaction">
         <level value="DEBUG"/>
      </logger>
      

できるだけ少ないクラスのDEBUGレベルをアクティブにすることをお勧めします。そうしないと、ログサイズが劇的に増加します。

20
Vlad Mihalcea

hibernategenerate_statisticsプロパティを設定してみてください

<prop key="hibernate.generate_statistics">true</prop>

とセット

log4j.logger.org.hibernate=DEBUG

次に、すべてのHibernateログが表示され、log4j構成ファイルにログインするためのHibernateクラスを正しく選択できるようになります。

5
laughter

新しく作成されたトランザクションのトランザクション分離レベルも確認する場合:

log4j.logger.org.springframework.transaction.support.AbstractPlatformTransactionManager = debug log4j.logger.org.springframework.orm.hibernate5.HibernateTransactionManager = debug log4j.logger.org.springframework.orm.jpa.JpaTransactionManager = debug log4j.logger.org .springframework.jdbc.datasource.DataSourceTransactionManager = debug

0
Alexander M