2009-09-04 6 views
8

Ich konnte keine Console-Ausgabe (um Debugging zu helfen) aus Hibernate bekommen, obwohl ich einige Eigenschaften in der Datei hibernate.cfg.xml eingestellt habe. Wenn Sie beispielsweise die Zeile <property name="show_sql">true</property> hinzufügen, werden in der Tat keine SQL-Anweisungen in der Konsole angezeigt.Wie bekomme ich mehr Debug-Meldungen von Hibernate?

Ich habe auch versucht, mit dem Inhalt der log4j.properties Datei - wie Einstellung log4j.logger.org.hibernate=debug - ohne Glück zu spielen. Was vermisse ich?


Edit: der Inhalt der Hibernate-service.xml-Datei ist

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

Ich bin nicht 100% sicher, ob dies tatsächlich eine Wirkung hat, though. Diese XML-Datei befindet sich im Eclipse-Projekt, das meine Datenbankdaten verarbeitet, aber nicht im JBoss-Bereitstellungsverzeichnis enthalten ist.


Edit 2: Dies wird auf jeden Fall als HAR eingesetzt. Das heißt, ich bin mir ziemlich sicher, dass ich brauche hibernate.cfg.xml - Ich erinnere mich, Probleme zu haben, wenn ein Mapping-Dokument als Eintrag in dieser Datei weggelassen wurde. Ich denke, die HAR wird Ameise erzeugt unter Verwendung - es ist ein Ziel für die es in der Datei 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> 

aber wenn ich tue, um den Ant-Build mit falsch geformter XML in der Hibernate-service.xml-Datei, es scheitert nicht. Update Selbst das vollständige Löschen der Datei führt nicht dazu, dass ein Build fehlschlägt. Irgendwelche Ideen hier? End-Update

Es klingt wie sollte die Ausgabe von SQL-Anweisungen Hibernate bekommen (wenn alles richtig eingestellt ist oben) ganz darum kümmern - bedeutet das, dass die Einstellungen in log4j.properties keinen Unterschied machen? - weil das tatsächlich die Ausgabe ändert, wenn ant ausgeführt wird.

bearbeiten 3: Nachdem mit meinen Daten in andere seltsame Probleme laufen har löschte ich die har Datei, um sie vollständig und baute das Ziel har Ant Build verwenden. Plötzlich funktioniert alles! Danke an das Schachspiel für seine großartige Hilfsbereitschaft. Kann nicht sagen, dass ich genau weiß, was es am Ende getan hat, aber ich würde eher seine Bemühungen anerkennen, als zu schreiben und meine eigene Antwort zu akzeptieren; Ich entschuldige mich, wenn Sie kein "er" sind.

+0

'hibernate.show_sql' (oder' ShowSqlEnabled' in JBoss mbean) unabhängig von Logging-Konfiguration; Wenn aktiviert, wird immer SQL in die Konsole gedruckt. Das Setzen von 'org.hibernate.SQL = DEBUG' in der entsprechenden Logger-Konfiguration wird dasselbe tun, aber für jeden Ausgang, der für den Logger konfiguriert ist. Beide Methoden sind voneinander unabhängig (z. B. wenn Sie beide setzen, erhalten Sie zweimal sql) – ChssPly76

Antwort

10

Der korrekte Name der Eigenschaft ist hibernate.show_sql und es funktioniert definitiv.

Stellen Sie sicher, dass Ihre hibernate.cfg.xml die richtige ist und es wird abgeholt; Gleiches gilt für Ihre log4j.properties Datei. Ich weiß, dass diese wie dumme Vorschläge scheinen, aber sie machen 98% der "fehlenden Logging-Ausgabe" Probleme aus.

Aktualisieren: Ich werde die Antwort aktualisieren, anstatt Kommentare hinzuzufügen. Sie müssen sicherstellen, dass Ihre hibernate-service.xml von JBoss abgeholt wird. Der einfache Weg zu überprüfen ist es, einen Syntaxfehler hinzuzufügen (wie eine schließende geschweifte Klammer auf einem Element wegzulassen) und zu sehen, ob JBoss während des Neustarts explodiert :-) Es sollte in har verpackt und als Teil Ihres Build-Prozesses, so Wenn Sie erkennen, dass es nicht von JBoss abgeholt wird, das ist der Ort zu suchen.Ich würde die widersprüchlichen Einstellungen in hibernate.cfg.xml loswerden (z. B. alles, was Sie als mbean Attribute angeben, sollte nicht in hibernate.cfg.xml repliziert werden). Brauchen Sie überhaupt hibernate.cfg.xml? Wenn sie als HAR bereitgestellt werden, sollten Ihre Zuordnungen automatisch gescannt/abgeholt werden.

+0

Muss ich auch die Log-Ebene in log4j.properties setzen? - Ich habe zuerst herausgefunden, dass ich mit den falschen Kopien dieser beiden Dateien gearbeitet habe, aber ich habe mit den richtigen Kopien auf Werkzeuge umgestiegen, bevor ich hier gefragt habe. –

+0

Wenn Sie "hibernate.show_sql" auf "true" setzen, sollten Sie SQL in die Konsole "_irregardless_" der Protokollierungskonfiguration drucken. Alternativ können Sie 'org.hibernate.SQL' Loglevel auf DEBUG setzen, um ihn auf die Logdatei Ihrer Wahl zu richten (wie in Ihrer Logging Konfiguration konfiguriert). – ChssPly76

+0

Ich habe die Zeile in' true 'aber immer noch nichts. : \ –

6

Ich verwende nur die Datei log4j.properties, um Hibernate-Anweisungen zu protokollieren. Für SQL-Anweisungen muss die Eigenschaft log4j.logger.org.hibernate.SQL auf debug festgelegt werden, und für SQL-Parameter/zurückgegebene Werte muss die Eigenschaft log4j.logger.org.hibernate.type festgelegt werden zu Spur. Hier

ist die Datei log4j.properties ich benutze:

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

Aus irgendeinem Grund scheint meine Datei 'log4j.properties' die Konsolenausgabe nicht zu beeinflussen, wenn JBoss tatsächlich ausgeführt wird. Es scheint jedoch, den Ausgangspegel zu steuern, wenn ich mein Ameisenbau-Skript ausführe. –

1

Auch shure machen Sie zum richtigen log4j-Konfiguration.

Wenn Sie in jboss laufen (Sie tun das, oder?), Konfigurieren Sie log4j-Logging in $JBOSS_HOME/server/<config>/conf/jboss-log4j.xml.

Es gibt zwei Standard-Appender; FILE schreibt zu log/server.log und CONSOLE zu stdout (manchmal umgeleitet log/console.log). Passen Sie den Schwellenwert für den Appender an DEBUG in der Datei an oder indem Sie die Systemproperty jboss.server.log.threshold festlegen (hängt davon ab, welche Version von jboss Sie verwenden).

Sie brauchen auch durch das Hinzufügen einer Kategorie, um die Protokollierung Priorität von Hibernate anzupassen:

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