web-dev-qa-db-ja.com

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デプロイディレクトリにはないようです。


編集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ファイルを完全に削除し、harantビルドターゲットを使用して再ビルドしました。突然すべてが機能しています!彼の素晴らしい有用性のためのchessplayに感謝します。最終的に何が起こったのか正確にわかっているとは言えませんが、私自身の答えを書いて受け入れるよりも、彼の努力に感謝したいと思います。あなたが「彼」でないなら、私の謝罪。

12
Matt Ball

正しいプロパティ名は hibernate.show_sql であり、間違いなく機能します。

hibernate.cfg.xmlが正しいものであり、ピックアップされていることを確認してください。 log4j.propertiesファイルについても同じことが言えます。私はそれらがばかげた提案のように見えることを知っていますが、それらは「ロギング出力の欠落」問題の98%を占めています。

Update:コメントを追加し続けるのではなく、回答を更新します。 hibernate-service.xmlがJBossによってピックアップされていることを確認する必要があります。確認する簡単な方法は、構文エラーを追加して(一部の要素の閉じ中括弧を省略するなど)、再起動中にJBossが爆発するかどうかを確認することです:-) harにパッケージ化し、の一部としてデプロイする必要があります。ビルドプロセスなので、JBossによって検出されていないことに気付いた場合は、ここを参照してください。 hibernate.cfg.xmlの競合する設定を取り除きます(たとえば、mbean属性として指定しているものはすべてhibernate.cfg.xmlに複製しないでください)。さらに言えば、hibernate.cfg.xmlも必要ですか? HARとしてデプロイされた場合、マッピングは自動的にスキャン/取得されます。

14
ChssPly76

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
8
jwaddell

また、正しいlog4j構成を使用していることを確認してください。

Jbossで実行する場合(そうしていますよね?)、log4j-loggingを$JBOSS_HOME/server/<config>/conf/jboss-log4j.xmlで設定します。

2つのデフォルトのアペンダーがあります。 FILElog/server.logに書き込みます。CONSOLEstdoutに書き込みます(log/console.logにリダイレクトされることもあります)。アペンダーのしきい値をファイル内でDEBUGに調整するか、systemproperty jboss.server.log.thresholdを設定します(使用しているjbossのバージョンによって異なります)。

カテゴリを追加して、休止状態のログの優先度を調整する必要もあります。

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