如何从休眠得到更多的调试信息?(How do I get more debug messages f

2019-07-04 21:31发布

我一直没能得到任何更多的控制台输出(以帮助调试)从休眠尽管在设置几个属性hibernate.cfg.xml文件。 例如,添加行<property name="show_sql">true</property>没有,其实,在控制台中显示的SQL语句。

我也试着与内容玩耍log4j.properties文件-如设置log4j.logger.org.hibernate=debug -没有运气。 我在想什么?


编辑:休眠-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文件是在处理我的数据库的东西,但似乎并没有要在JBoss deploy目录的Eclipse项目。


编辑2:这是肯定部署为HAR。 不过,我敢肯定,我需要hibernate.cfg.xml -我记得有问题,当一个映射文档时也省略该文件中的条目。 我认为HAR使用蚂蚁产生的 - 有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>

但是当我做蚂蚁构建与休眠-service.xml文件不正确的XML,它不会失败。 更新甚至删除该文件完全不会导致生成失败。 这里的任何想法? 结束时更新

这听起来像得到的Hibernate输出SQL语句应(如果一切都设置正确)完全照顾它 - 这是否意味着,在log4j.properties设置不会在这里做一个区别? -因为它实际运行ant时改变输出。

编辑3:运行到其它怪异的问题与我的数据后har ,我完全删除了HAR文件,并使用重建它har蚂蚁构建目标。 突然间一切的工作! 由于chessplay他真棒乐于助人。 不能说我确切地知道到底做了,但我宁愿承认他的努力,比写,并接受我自己的答案; 我的道歉,如果你不是一个“他”。

Answer 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 ,您应该映射可自动扫描/拾起。



Answer 2:

我只是用log4j.properties文件记录Hibernate的声明。 对于SQL语句时,log4j.logger.org.hibernate.SQL属性需要被设置为调试和SQL参数/返回值log4j.logger.org.hibernate.type属性需要设置为追查

下面是我用的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


Answer 3:

另外,请你使用正确的log4j的配置舒尔。

当在JBoss中运行(你正在做的,对吧?),你配置log4j日志记录在$JBOSS_HOME/server/<config>/conf/jboss-log4j.xml

有两个默认的追加程序; FILE写入log/server.logCONSOLEstdout (有时重定向log/console.log )。 调整门槛的附加器,以DEBUG在文件或通过设置systemproperty jboss.server.log.threshold (取决于您所使用的JBoss的版本)。

您还需要通过增加一个类别调整休眠的记录优先级:

<category name="org.hibernate">
  <priority value="DEBUG"/>
</category>


文章来源: How do I get more debug messages from Hibernate?