2009-01-11 51 views
2

我一直在使用Hibernate非常成功,但今天我注意到一个奇怪的现象与日志记录。如果我打开org.hibernate(例如org.hibernate.SQLorg.hibernate.impl.SessionImpl)下的类的日志记录(处于“调试”级别),我会获得与这些类相对应的每个日志行两次。我从来没有看到与记录任何其他包。双重登录休眠

下面是日志输出摘录。第一和第四行是我的,其他都是Hibernate的:(!幸运)从数据库侧

23:54:45,472 TRACE UserDaoImpl:37 - Loading User by id: 2 
23:54:45,473 DEBUG SQL:401 - select user0_.id as id22_2_, user0_.avatar as avatar22_2_, ... 
23:54:45,473 DEBUG SQL:401 - select user0_.id as id22_2_, user0_.avatar as avatar22_2_, ... 
23:54:45,499 TRACE PropertyDaoImpl:40 - Loading class com.myapp.locale.Region with ID 21 
23:54:45,503 DEBUG SQL:401 - select region0_.id as id19_1_, region0_.code as code19_1_, ... 
23:54:45,503 DEBUG SQL:401 - select region0_.id as id19_1_, region0_.code as code19_1_, ... 

证据表明命令只发送一次每个。

我使用Hibernate的注解3.3.1.GA
与PostgreSQL的JDBC连接器5.0.7
和log4j的1.2.14

回答

8

所有我能想到的:

  1. 检查你的log4j配置没有在不同级别定义的多个appender?如果您的appender已连接到org.hibernate记录器,并再次附加到org.hibernate.SQL记录器,那么您会看到这两次(除非关闭了较低级别记录器的可加性)。
  2. 您没有在SessionFactory上设置hibernate.show_sql属性?这不会启用日志记录到log4j(通过log4j config来完成),它只是转储到控制台。如果你的log4j也转储到控制台,你会看到它两次。但是,这看起来像是log4j格式的日志行,而不是hibernate完成的控制台转储,因此看起来不太可能。值得一提的是。
+0

我的log4j.properties包含2行关于Hibernate:一个设置org.hibernate为“警告”,另一个设置org.hibernate.SQL为“调试”。评论其中的第一个解决了这个问题。谢谢,考恩! (我现在读关于“可加性”...) – pierdeux 2009-01-11 19:50:51