我正在尝试调试一些存在性能问题的网络应用。我开启了hibernate日志记录,我看到了很多这样的事情:
2010-10-28 10:58:00,423 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 5276786198212608
2010-10-28 10:58:01,390 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 5276786202173440
2010-10-28 10:58:01,418 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 5276786202288128
2010-10-28 10:58:26,181 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 5276786303717376
我担心没有关于“关闭会话”
的日志我目前正在看这个: http://static.springsource.org/spring/docs/2.5.x/reference/orm.html 但它没有任何让我对日志安心的东西
答案 0 :(得分:3)
查看source,该消息似乎是从SessionImpl.java的构造函数中记录的。会话关闭时会有相应的日志语句(请参阅方法public Connection close() throws HibernateException
),但会在TRACE
级别记录。我对slf4j并不熟悉,但从this piece of documentation来看,TRACE
看起来比DEBUG
更精细。因此,请尝试增加日志记录量(可能是ALL
?)并验证会话是否已关闭。
答案 1 :(得分:1)
您是如何访问会话的?您使用的是弹簧交易注释吗?
我们在当前应用程序中使用了hibernate模板..虽然显然不再需要它。虽然我确实看到了其他的hibernate初始化调试语句,但我还是看不到它作为调试出现。
无论如何,您可以获得对会话工厂的引用并调用sessionFactory.getStatistics()。getSessionOpenCount()
您可能必须调用setStatisticsEnabled(true)
http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/stat/Statistics.html
这至少可以让你获得开放会话的数量,看看它是否会不断上升。
Per binil的回答是,还有一个关于不同日志级别的打开/关闭日志条目的错误报告。 http://opensource.atlassian.com/projects/hibernate/browse/HHH-2425