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%を占めています。
Update:コメントを追加し続けるのではなく、回答を更新します。 hibernate-service.xml
がJBossによってピックアップされていることを確認する必要があります。確認する簡単な方法は、構文エラーを追加して(一部の要素の閉じ中括弧を省略するなど)、再起動中にJBossが爆発するかどうかを確認することです:-) har
にパッケージ化し、の一部としてデプロイする必要があります。ビルドプロセスなので、JBossによって検出されていないことに気付いた場合は、ここを参照してください。 hibernate.cfg.xml
の競合する設定を取り除きます(たとえば、mbean属性として指定しているものはすべてhibernate.cfg.xml
に複製しないでください)。さらに言えば、hibernate.cfg.xml
も必要ですか? HAR
としてデプロイされた場合、マッピングは自動的にスキャン/取得されます。
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
また、正しいlog4j構成を使用していることを確認してください。
Jbossで実行する場合(そうしていますよね?)、log4j-loggingを$JBOSS_HOME/server/<config>/conf/jboss-log4j.xml
で設定します。
2つのデフォルトのアペンダーがあります。 FILE
はlog/server.log
に書き込みます。CONSOLE
はstdout
に書き込みます(log/console.log
にリダイレクトされることもあります)。アペンダーのしきい値をファイル内でDEBUG
に調整するか、systemproperty jboss.server.log.threshold
を設定します(使用しているjbossのバージョンによって異なります)。
カテゴリを追加して、休止状態のログの優先度を調整する必要もあります。
<category name="org.hibernate">
<priority value="DEBUG"/>
</category>