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

标签 java hibernate debugging jboss log4j

尽管在 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/

相关文章:

Java 8,如何使用 BiPredicate 将流元素分组到集合中

java - Hadoop 给 reducer 带来了什么?

java - Spring hibernate : Values not inserting into database

java - 如何使用 Hibernate MySQL Maven Spring MVC 显示数据库中的所有行

java - 在 Hibernate 中映射复杂值对象

debugging - 如何永久关闭反汇编中的调试?

java - maven 3.2.3 无法正确导入资源

java.lang.ClassNotFoundException : javax. 持久性.实体

visual-studio - 使用本地 IIS 编辑并继续

multithreading - Delphi IDE 在调试线程时挂起