尽管在 hibernate.cfg.xml
中设置了一些属性,但我无法从 Hibernate 获得更多控制台输出(以帮助调试)文件。例如,添加行 <property name="show_sql">true</property>
实际上,并没有在控制台中显示 SQL 语句。
我也尝试过 log4j.properties
的内容文件 - 类似设置 log4j.logger.org.hibernate=debug
- 没有运气。我错过了什么?
编辑hibernate-service.xml文件内容为
<server>
<mbean code="org.jboss.hibernate.jmx.Hibernate"
name="jboss.har:service=Hibernate_SMS">
<attribute name="DatasourceName">java:/SMS_DS</attribute>
<attribute name="Dialect">org.hibernate.dialect.HSQLDialect</attribute>
<attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute>
<attribute name="CacheProviderClass">org.hibernate.cache.HashtableCacheProvider</attribute>
<attribute name="ShowSqlEnabled">true</attribute>
</mbean>
</server>
不过,我不能 100% 确定这是否真的有任何效果。该 XML 文件在处理我的数据库内容的 Eclipse 项目中,但似乎不在 JBoss 部署目录中。
编辑 2: 这绝对是作为 HAR 部署的。也就是说,我很确定我需要 hibernate.cfg.xml
- 我记得当映射文档作为该文件中的条目被省略时出现问题。我认为 HAR 是使用 ant 生成的 - 在 build.xml 文件中有一个目标:
<target name="har" depends="prepare" description="Builds the Hibernate HAR file">
<mkdir dir="${class.root}" />
<mkdir dir="${distribution.dir}" />
<jar destfile="${distribution.dir}/${har.name}">
<!-- include the hbm.xml files -->
<fileset dir="${class.root}">
<include name="**/*.hbm.xml"/>
<include name="com/[redacted]/sms/data/dto/*.class"/>
<include name="com/[redacted]/sms/data/dto/base/*.class"/>
</fileset>
<!-- include jboss-service.xml -->
<metainf dir="${hibernate.dir}">
<include name="hibernate-service.xml"/>
</metainf>
</jar>
</target>
但是当我在 hibernate-service.xml 文件中使用格式不正确的 xml 进行 ant 构建时,它不会失败。 更新 即使完全删除文件也不会导致构建失败。这里有什么想法吗? 结束更新
听起来让 Hibernate 输出 SQL 语句应该(如果一切设置正确)完全处理它 - 这是否意味着 log4j.properties 中的设置在这里不会产生影响? - 因为这实际上确实在运行 ant 时改变了输出。
编辑 3:在我的数据遇到其他奇怪的问题后 har
, 我完全删除了 har 文件并使用 har
重建它 Ant 构建目标。突然一切正常!感谢 chessplay 的帮助。不能说我确切地知道最后做了什么,但我宁愿承认他的努力,也不愿写下并接受我自己的答案;如果您不是“他”,我深表歉意。
最佳答案
正确的属性名称是 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
,您的映射应该会被自动扫描/拾取。
关于java - 如何从 Hibernate 获取更多调试消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380898/