java - 如何在 Hibernate 中记录数据库事务的开始和完成

标签 java hibernate transactions glassfish log4j

sql_show = true

hibernate 中的此属性打印运行的 sql,但我还想查看 begin transactioncomplete transaction 语句,以便我可以跟踪事务持续时间并查看查询在哪个事务中运行。

谷歌搜索显示

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

还应向您显示交易级别数据。 但事实并非如此。

调查更多我查看了 hibernate 代码并找到了一个类名

org.hibernate.ejb.TransactionImpl

这个类有 begin 和 complete 方法,但是这个方法不记录任何东西。

关于如何在 hibernate 中查看事务级别信息的任何建议
我正在使用 hibernate 2.2

最佳答案

对于 hibernate 5

  • 对于 SLF4J 日志记录:

    <logger name="org.hibernate.engine.transaction.internal.TransactionImpl" level="debug"/>
    
  • 对于 Log4j:

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

对于 hibernate 4

您需要为以下类将日志记录阈值设置为 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 级别,否则,您的日志大小将急剧增加。

关于java - 如何在 Hibernate 中记录数据库事务的开始和完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30576385/

相关文章:

java - 将下载哪个依赖项?

java:多线程、多用户 Web 应用程序中的 FTP

java - 如何使用 org.hibernate.action.spi.AfterTransactionCompletionProcess?

java - Wildfly - Infinispan 事务配置

java - Spring 事务,EntityManager 生命周期

java - JMockit 模拟 System.currentTimeMillis()

java - XSL - 在节点路径中使用变量

Spring找不到类[org.hibernate.ejb.HibernatePersistence]

java - hibernate "PreInsertEvent.getSource()"NoSuchMethodError

java - 如何归档 Java 和 C++ 应用程序之间的分布式(数据库)事务?