如何在Hibernate

时间:2015-06-01 14:39:19

标签: 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 2.2

4 个答案:

答案 0 :(得分:14)

对于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>
      
  3. 最好为尽可能少的类激活DEBUG级别,否则,您的日志大小将会急剧增加。

答案 1 :(得分:4)

尝试设置hibernate generate_statistics属性

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

并设置

log4j.logger.org.hibernate=DEBUG

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

答案 2 :(得分:0)

如果您还想查看新创建的事务的事务隔离级别:

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

答案 3 :(得分:0)

启用这些日志可能也有帮助

<logger name="org.hibernate.resource.transaction" level="debug"/>
<logger name="org.hibernate.resource.jdbc" level="debug"/>
<logger name="org.hibernate.internal.SessionImpl" level="debug"/>
<logger name="org.hibernate.internal.SessionFactoryImpl" level="debug"/>

(休眠5)

它打印有关会话开始/结束和其他相关详细信息的日志

[org.hibernate.internal.SessionImpl](默认任务19)在时间戳记下打开了会话[8c3ecbac-91b5-4dd8-b012-bfb1b4fe476c]:1592951456170 .....

[org.hibernate.internal.SessionImpl](默认任务19)关闭会话[8c3ecbac-91b5-4dd8-b012-bfb1b4fe476c] ....... [org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl](默认任务19)逻辑连接已关闭