2009-09-04 6 views
8

hibernate.cfg.xmlファイルにいくつかのプロパティを設定していても、Hibernateからコンソール出力を得ることができませんでした(デバッグに役立つ)。たとえば、行<property name="show_sql">true</property>を追加しても、実際にはコンソールにSQL文が表示されませんでした。Hibernateからより多くのデバッグメッセージを取得するには?

また、log4j.propertiesファイルのコンテンツ(log4j.logger.org.hibernate=debug)の内容を遊びませんでした。私は何が欠けていますか?


編集:休止状態-service.xmlファイルの内容は、私は、これは実際にかかわらず、任意の効果を持っている場合は100%わからない

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

です。そのXMLファイルは、私のデータベースを処理するEclipseプロジェクトにありますが、JBoss deployディレクトリにはありません。


編集2:これは間違いなくHARとして展開されます。つまり、私はかなり必要だと確信していますhibernate.cfg.xml - マッピングファイルがそのファイルのエントリとして省略されたときに問題が発生したことを思い出します。私は休止状態-service.xmlをファイルに誤っ整形式XMLとAntビルドを行うときに、それを

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

しかし:それのためのターゲットは、build.xmlファイルにあります - 私はHARは、antを使用して生成されると思います失敗しません。 更新ファイルを完全に削除してもビルドが失敗することはありません。ここにどんなアイデア? エンド更新

出力SQL文にHibernateを得ることは(すべてが正しくセットアップされた場合)、完全にそれの世話をする必要があるように聞こえる - それはlog4j.propertiesの設定はここでの違いをすることはありませんことを意味するのでしょうか? - 実際にはになりますので、antを実行すると出力が変わります。

編集3:私のデータharと他の奇妙な問題に実行した後、私は完全にHARファイルを削除し、har Antビルドターゲットを使用してそれを再構築します。突然すべてが動いている!彼のすばらしい有用性のためのチェスプレイに感謝します。私は最終的に何をしたのか正確に知っているとは言えませんが、私は自分の答えを書いて受け入れるよりも、彼の努力を認めています。あなたが「彼」でないなら、私の謝罪。

+0

'hibernate.show_sql'(または、のJBoss MBean内の' ShowSqlEnabled')は、ロギング設定とは無関係です。有効にすると、SQLは常にコンソールに出力されます。適切なロガー設定で 'org.hibernate.SQL = DEBUG'を設定すると、ロガーのために設定された出力にも同じことが実行されます。どちらの方法も互いに独立しています(たとえば、両方とも設定するとsqlが2回印刷されます) – ChssPly76

答えて

10

正しいプロパティ名は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としてデプロイされている場合は、マッピングを自動的にスキャン/取得する必要があります。

+0

log4j.propertiesでログレベルを設定する必要がありますか? - 私は最初に、2つのファイルの間違ったコピーで作業していましたが、私がここで尋ねる前に正しいコピーでツールに切り替えました。 –

+0

hibernate.show_sqlをtrueに設定すると、ロギング設定のコンソール_irregardless_にSQLが出力されます。あるいは、 'org.hibernate.SQL'ログレベルをDEBUGに設定して、ロギング設定で設定されているように、選択したログファイルに指定することができます。 – ChssPly76

+0

' true 'まだ何もありません。 :\ –

6

私は、log4j.propertiesファイルを使用して、Hibernate文をログに記録します。 SQL文の場合、log4j.logger.org.hibernate.SQLプロパティはデバッグに設定し、SQLパラメータ/戻り値の場合はlog4j.logger.org.hibernate.typeプロパティを設定する必要があります〜トレース

### 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 
+0

JBossが実際に動作しているときに何らかの理由で私の 'log4j.properties'ファイルがコンソール出力に影響を与えていないようです。しかし、私がantビルドスクリプトを実行すると、出力レベルを制御するように見えます。 –

1

はまた、あなたが正しいのlog4jコンフィギュレーションを使用しているSHUREを行います。ここでは

は、私が使用してlog4j.propertiesファイルです。

jbossで実行している場合は、log4j-loggingを$JBOSS_HOME/server/<config>/conf/jboss-log4j.xmlに設定します。

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

ます。また、カテゴリを追加することによって、休止状態のログの優先順位を調整する必要があります:

<category name="org.hibernate"> 
    <priority value="DEBUG"/> 
</category> 
関連する問題