一尘不染

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

hibernate

尽管在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 deploy目录中。


编辑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进行蚂蚁构建时,它不会失败。 更新
即使完全删除文件也不会导致构建失败。这里有什么想法吗? 结束更新

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

编辑3:
在遇到其他奇怪的数据问题后,我har完全删除了har文件,并使用harant构建目标对其进行了重建。突然一切正常!感谢国际象棋对他的帮助。不能说我确切地知道最后做了什么,但是我宁愿承认他的努力,也不愿写出并接受我自己的答案。如果您不是“他”,我深表歉意。


阅读 204

收藏
2020-06-20

共1个答案

一尘不染

正确的属性名称是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,则应自动扫描/提取您的映射。

2020-06-20