2009-09-04 3 views
8

Я не смог получить больше консольного вывода (чтобы помочь с отладкой) из Hibernate, несмотря на то, что у него есть несколько свойств в файле hibernate.cfg.xml. Например, добавление строки <property name="show_sql">true</property> фактически не отображало операторы SQL в консоли.Как получить больше отладочных сообщений из Hibernate?

Я также попытался сыграть с содержимым файла log4j.properties, подобного файлу log4j.logger.org.hibernate=debug - не повезло. Что мне не хватает?


Edit: содержимое файла гибернации-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.


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

но когда я делаю муравьев строить с неправильно сформированным XML в файле гибернации-service.xml, его не терпит неудачу. Обновление Даже удаление файла полностью не приводит к сбою сборки. Есть идеи? End Update

Это звучит, как получить Hibernate для заявлений вывода SQL должен (если все настроено правильно) заботиться о нем целиком - это значит, что параметры в log4j.properties не будет делать разницы здесь? - потому что на самом деле делает изменить выход при запуске муравей.

Edit 3: После запуска в другие странные вопросы, с моими данными har, я удалил файл HAR целиком и перестроил его, используя цель Ant сборки har. Вдруг все работает! Благодаря шахматной игре за его потрясающую полезность. Не могу сказать, что я точно знаю, что это сделал в конце, но я бы скорее признал его усилия, а не написал и принял свой собственный ответ; Приносим извинения, если вы не «он».

+0

'hibernate.show_sql' (или,' ShowSqlEnabled' в JBoss MBean) не зависит от конфигурации протоколирования; если он включен, он всегда будет печатать SQL для консоли. Установка 'org.hibernate.SQL = DEBUG' в соответствующей конфигурации регистратора будет делать то же самое, но независимо от того, какой выход настроен для регистратора. Оба метода не зависят друг от друга (например, если вы установили оба значения, вы дважды получите sql) – 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? - Сначала я обнаружил, что работал с неправильными копиями этих двух файлов, но переключился на оснастку с правильными копиями, прежде чем я спросил здесь. –

+0

Установка hibernate.show_sql в true должна печатать SQL для консоли _irregardless_ конфигурации регистрации. В качестве альтернативы вы можете установить уровень журнала org.hibernate.SQL в DEBUG, чтобы направить его в файл журнала по вашему выбору (как настроено в вашей конфигурации ведения журнала) – ChssPly76

+0

Я изменил строку на '<имя свойства =" hibernate.show_sql " > true ', но все равно ничего. : \ –

6

Я просто использую файл 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 
+0

По какой-то причине мой файл 'log4j.properties', похоже, не влияет на вывод консоли при запуске JBoss. Тем не менее, он, похоже, контролирует выходной уровень, когда я запускаю скрипт сборки ant. –

1

сделать Также Shure вы используете правильную log4j-конфигурацию.

При запуске в jboss (вы делаете это, правильно?), Вы настраиваете log4j-logging в $JBOSS_HOME/server/<config>/conf/jboss-log4j.xml.

Есть два стандартных приложения; FILE пишет в log/server.log и CONSOLE - stdout (иногда перенаправляется log/console.log). Откорректируйте пороговое значение в приложении DEBUG в файле или установив системное свойство jboss.server.log.threshold (зависит от того, какую версию jboss вы используете).

Вам также нужно настроить приоритет протоколирования спящего режима путем добавления категории:

<category name="org.hibernate"> 
    <priority value="DEBUG"/> 
</category> 
Смежные вопросы