如何在休眠中记录数据库事务的开始和完成

2022-09-01 18:33:21
sql_show = true

休眠中的此属性打印运行的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

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

调查更多,我研究了休眠代码,发现了一个类名

org.hibernate.ejb.TransactionImpl

此类具有 begin 和 complete 方法,但此方法不记录任何内容。

任何建议如何在休眠状态下查看交易级别信息
我正在使用休眠 2.2


答案 1

对于休眠 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>
    

对于休眠 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 级别,因为否则,日志大小将急剧增加。


答案 2

尝试设置休眠generate_statistics属性

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

并设置

log4j.logger.org.hibernate=DEBUG

然后你会看到所有的休眠日志,你将能够正确地选择休眠类来登录log4j配置文件


推荐