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を使用しています
SLF4Jロギングの場合:
<logger name="org.hibernate.engine.transaction.internal.TransactionImpl" level="debug"/>
Log4jの場合:
<logger name="org.hibernate.engine.transaction.internal.TransactionImpl">
<level value="DEBUG"/>
</logger>
次のクラスでは、ログのしきい値をDEBUGに設定する必要があります。
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>
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レベルをアクティブにすることをお勧めします。そうしないと、ログサイズが劇的に増加します。
hibernategenerate_statisticsプロパティを設定してみてください
<prop key="hibernate.generate_statistics">true</prop>
とセット
log4j.logger.org.hibernate=DEBUG
次に、すべてのHibernateログが表示され、log4j構成ファイルにログインするためのHibernateクラスを正しく選択できるようになります。
新しく作成されたトランザクションのトランザクション分離レベルも確認する場合:
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