524 Stimmen

Wie drucke ich eine Abfragezeichenfolge mit Parameterwerten bei Verwendung von Hibernate?

Ist es in Hibernate möglich, generierte SQL-Abfragen mit echten Werten anstelle von Fragezeichen zu drucken?

Wie würden Sie vorschlagen, um Abfragen mit echten Werten zu drucken, wenn es nicht möglich ist, mit Hibernate API?

4voto

<!-- A time/date based rolling appender -->
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="logs/system.log" />
    <param name="Append" value="true" />
    <param name="ImmediateFlush" value="true" />
    <param name="MaxFileSize" value="200MB" />
    <param name="MaxBackupIndex" value="100" />

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" />
    </layout>
</appender>

<appender name="journaldev-hibernate" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="logs/project.log" />
    <param name="Append" value="true" />
    <param name="ImmediateFlush" value="true" />
    <param name="MaxFileSize" value="200MB" />
    <param name="MaxBackupIndex" value="50" />

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" />
    </layout>
</appender>

<logger name="com.journaldev.hibernate" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="journaldev-hibernate" />
</logger>

<logger name="org.hibernate" additivity="false">
    <level value="INFO" />
    <appender-ref ref="FILE" />
</logger>

<logger name="org.hibernate.type" additivity="false">
    <level value="TRACE" />
    <appender-ref ref="FILE" />
</logger>

<root>
    <priority value="INFO"></priority>
    <appender-ref ref="FILE" />
</root>

4voto

Zoren Konte Punkte 224

Verwendung einer YAML-Eigenschaft:

logging.level.org.hibernate:
    SQL: DEBUG
    type.descriptor.sql.BasicBinder: TRACE

4voto

S'chn T'gai Spock Punkte 1007

Hier ist, was für mich gearbeitet, setzen unten Eigenschaft in der log4j.file:

log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Einstellungen der Hibernate-Eigenschaften :

hibernate.show_sql=true

4voto

Sindhoo Oad Punkte 1154

Logging funktioniert, aber nicht genau das, was Sie wollen und ich wollte vor einiger Zeit, aber P6Spy funktioniert perfekt .

Aquí ist auch ein einfaches Tutorium zu implementieren. Für mich funktionierte es wie Charme.

  1. Laden Sie die P6Spy-Bibliothek herunter: Siehe p6spy-install.jar
  2. Extrahieren Sie es: Extrahieren Sie die p6spy-install.jar Datei, suchen Sie nach p6spy.jar y spy.properties
  3. Bibliotheksabhängigkeit hinzufügen: hinzufügen p6spy.jar in Ihre Projektbibliotheks-Abhängigkeit
  4. Ändern Sie die P6Spy-Eigenschaftendatei: Ändern Sie Ihre Datenbank-Konfigurationsdatei. Sie müssen Ihren bestehenden JDBC-Treiber durch den P6Spy JDBC-Treiber ersetzen ( com.p6spy.engine.spy.P6SpyDriver )

Original ist MySQL JDBC-Treiber -( com.mysql.jdbc.Driver )

<session-factory>
  <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  <!-- note the difference -->
  <property name="hibernate.connection.password">password</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myuser</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="show_sql">true</property>
</session-factory>

Geändert in P6Spy JDBC-Treiber ( com.p6spy.engine.spy.P6SpyDriver )

<session-factory>
  <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
  <property name="hibernate.connection.driver_class">com.p6spy.engine.spy.P6SpyDriver</property>  <!-- note the difference -->
  <property name="hibernate.connection.password">password</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myuser</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="show_sql">true</property>
</session-factory>
  1. Ändern Sie die P6Spy-Eigenschaftendatei: spy.properties

Ersetzen Sie die realdriver mit Ihrem vorhandenen MySQL JDBC-Treiber

realdriver=com.mysql.jdbc.Driver

# specifies another driver to use
realdriver2=
# specifies a third driver to use
realdriver3=

Ändern Sie den Speicherort der Protokolldatei in der logfile Eigentum. Alle SQL-Anweisungen werden in dieser Datei protokolliert.

Fenster:

logfile=c:/spy.log

UNIX:

logfile=/srv/log/spy.log
  1. Kopieren spy.properties zum Projektklassenpfad hinzufügen: Kopieren spy.properties in den Root-Ordner Ihres Projekts. Stellen Sie sicher, dass Ihr Projekt Folgendes finden kann spy.properties oder aber eine spy.properties file not found wird eine Ausnahme ausgelöst.

3voto

zime Punkte 171

Die Lösung ist korrekt, protokolliert aber auch alle Bindungen für die Ergebnisobjekte. Um dies zu verhindern, ist es möglich, einen separaten Appender zu erstellen und die Filterung zu aktivieren. Zum Beispiel:

<!-- A time/date based rolling appender -->
<appender name="FILE_HIBERNATE" class="org.jboss.logging.appender.DailyRollingFileAppender">
    <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
    <param name="File" value="${jboss.server.log.dir}/hiber.log"/>
    <param name="Append" value="false"/>
    <param name="Threshold" value="TRACE"/>
    <!-- Rollover at midnight each day -->
    <param name="DatePattern" value="'.'yyyy-MM-dd"/>

    <layout class="org.apache.log4j.PatternLayout">
        <!-- The default pattern: Date Priority [Category] Message\n -->
        <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
    </layout>

    <filter class="org.apache.log4j.varia.StringMatchFilter">
        <param name="StringToMatch" value="bind" />
        <param name="AcceptOnMatch" value="true" />
    </filter>
    <filter class="org.apache.log4j.varia.StringMatchFilter">
        <param name="StringToMatch" value="select" />
        <param name="AcceptOnMatch" value="true" />
    </filter>  
    <filter class="org.apache.log4j.varia.DenyAllFilter"/>
</appender> 

<category name="org.hibernate.type">
  <priority value="TRACE"/>
</category>

<logger name="org.hibernate.type">
   <level value="TRACE"/> 
   <appender-ref ref="FILE_HIBERNATE"/>
</logger>

<logger name="org.hibernate.SQL">
   <level value="TRACE"/> 
   <appender-ref ref="FILE_HIBERNATE"/>
</logger>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X