如何在 Hibernate 中记录数据库事务的开始和完成
How to log the start and the completion of DB transactions in Hibernate
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
还应向您显示交易级别数据。
但事实并非如此。
调查更多我查看了休眠代码并找到了一个 class 名称
org.hibernate.ejb.TransactionImpl
这个 class 有 begin 和 complete 方法,但是这个方法不记录任何东西。
关于如何在休眠中查看事务级别信息的任何建议 ?
我正在使用休眠 2.2
尝试设置休眠generate_statistics属性
<prop key="hibernate.generate_statistics">true</prop>
并设置
log4j.logger.org.hibernate=DEBUG
然后你会看到所有的hibernate日志,你就可以正确选择hibernate类登录log4j配置文件
对于休眠 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:
对于 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 级别,否则,您的日志大小将急剧增加。
如果您还想查看新创建事务的事务隔离级别:
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=调试
启用这些日志也可能有帮助
<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)
它打印有关会话的日志 begin/close 和其他相关详细信息
[org.hibernate.internal.SessionImpl] (default task-19) Opened Session [8c3ecbac-91b5-4dd8-b012-bfb1b4fe476c] at timestamp: 1592951456170
.....
[org.hibernate.internal.SessionImpl] (default task-19) Closing session [8c3ecbac-91b5-4dd8-b012-bfb1b4fe476c] ........
[org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl] (default task-19) Logical connection closed
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
还应向您显示交易级别数据。 但事实并非如此。
调查更多我查看了休眠代码并找到了一个 class 名称
org.hibernate.ejb.TransactionImpl
这个 class 有 begin 和 complete 方法,但是这个方法不记录任何东西。
关于如何在休眠中查看事务级别信息的任何建议 ?
我正在使用休眠 2.2
尝试设置休眠generate_statistics属性
<prop key="hibernate.generate_statistics">true</prop>
并设置
log4j.logger.org.hibernate=DEBUG
然后你会看到所有的hibernate日志,你就可以正确选择hibernate类登录log4j配置文件
对于休眠 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:
对于 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 级别,否则,您的日志大小将急剧增加。
如果您还想查看新创建事务的事务隔离级别:
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=调试
启用这些日志也可能有帮助
<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)
它打印有关会话的日志 begin/close 和其他相关详细信息
[org.hibernate.internal.SessionImpl] (default task-19) Opened Session [8c3ecbac-91b5-4dd8-b012-bfb1b4fe476c] at timestamp: 1592951456170 .....
[org.hibernate.internal.SessionImpl] (default task-19) Closing session [8c3ecbac-91b5-4dd8-b012-bfb1b4fe476c] ........ [org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl] (default task-19) Logical connection closed