如何从Hibernate获取更多调试消息?

尽管在hibernate.cfg.xml文件中设置了一些属性,但我还是无法从Hibernate获得更多的控制台输出(以帮助调试)。 例如,添加行true实际上并未在控制台中显示SQL语句。

我也尝试过使用log4j.properties文件的内容 – 比如设置log4j.logger.org.hibernate=debug – 没有运气。 我错过了什么?


编辑: hibernate-service.xml文件的内容是

   java:/SMS_DS org.hibernate.dialect.HSQLDialect java:/hibernate/SessionFactory org.hibernate.cache.HashtableCacheProvider true   

不过,我不是百分百确定这是否真的有任何影响。 该XML文件位于Eclipse项目中,用于处理我的数据库内容,但似乎不在JBoss部署目录中。


编辑2:这肯定是作为HAR部署的。 也就是说,我很确定我需要hibernate.cfg.xml – 我记得当映射文档作为该文件中的条目被省略时会出现问题。 我认为HAR是使用ant生成的 – 在build.xml文件中有一个目标:

                 

但是当我在hibernate-service.xml文件中使用格式错误的xml进行ant构建时,它不会失败。 更新即使完全删除文件也不会导致构建失败。 这里有什么想法? 结束更新

听起来像Hibernate输出SQL语句应该(如果一切正确设置)完全处理它 – 这是否意味着log4j.properties中的设置在这里不会产生影响? – 因为在运行ant时实际上改变输出。

编辑3:har我的数据har其他奇怪问题后,我完全删除了har文件,并使用har ant build target重建了它。 突然间一切正常! 感谢国际象棋,因为他非常乐于助人。 不能说我到底知道到底是做了什么,但我更愿意承认他的努力,而不是写下并接受我自己的答案; 如果你不是“他”,我道歉。

正确的属性名称是hibernate.show_sql ,它绝对有效。

确保你的hibernate.cfg.xml是正确的,并且它被拾取; 您的log4j.properties文件也是如此。 我知道那些似乎是愚蠢的建议,但它们占“缺少日志输出”问题的98%。

更新 :我将更新答案,而不是继续添加评论。 你需要确保你的hibernate-service.xml被JBoss选中。 检查的简单方法是向它添加一个语法错误(比如省略某个元素上的右括号)并查看JBoss在重启期间是否爆炸:-)它应该打包成har并作为构建过程的一部分进行部署,所以如果你意识到它没有被JBoss接收,那就是值得一看的地方。 我将摆脱hibernate.cfg.xml的冲突设置(例如,您指定为mbean属性的所有内容都不应在hibernate.cfg.xml复制)。 就此而言,你甚至需要hibernate.cfg.xml吗? 如果部署为HAR ,则应自动扫描/拾取映射。

我只是使用log4j.properties文件来记录Hibernate语句。 对于SQL语句,需要将log4j.logger.org.hibernate.SQL属性设置为debug ,对于SQL参数/返回值,需要将log4j.logger.org.hibernate.type属性设置为trace

这是我使用的log4j.properties文件:

 ### direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### Root logger log4j.rootLogger=debug, stdout ### Main Hibernate log4j.logger.org.hibernate=debug ### log just the SQL log4j.logger.org.hibernate.SQL=debug ### log JDBC bind parameters log4j.logger.org.hibernate.type=trace 

还要确保你使用正确的log4j配置。

在jboss中运行时(你正在这样做,对吗?),你在$JBOSS_HOME/server//conf/jboss-log4j.xml配置log4j-logging。

有两个默认的appender; FILElog/server.logCONSOLE写入stdout (有时重定向到log/console.log )。 将appender上的阈值调整为文件中的DEBUG ,或者通过设置systemproperty jboss.server.log.threshold(取决于您使用的jboss版本)。

您还需要通过添加类别来调整hibernate的日志记录优先级: