2014-02-13 17 views
5

Ich benutze log4j2 mit slf4j und Hibernate 4.3.1. Ich habe Probleme, die Parameter der SQL-Abfragen zu zeigen. Ich habe nicht gefunden, um diese zu zeigen (SQL-Abfragen sind gut dargestellt, aber ohne Parameter). Hier ist, was ich in meinem persistence.xml angegeben haben:Hibernate 4.3 SQL-Parameter anzeigen

<persistence version="2.1" 
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd"> 
<persistence-unit name="xxxxx" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <properties> 
     <property name="hibernate.archive.autodetection" value="class" /> 
     <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" /> 
     <property name="hibernate.hbm2ddl.auto" value="update" /> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.format_sql" value="true"/> 
     <property name="hibernate.use_sql_comments" value="true"/> 
     <property name="hibernate.query.factory_class" 
      value="org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory" /> 
     <property name="max_fetch_depth" value="2" /> 
     <property name="hibernate.jdbc.batch_size" value="100" /> 
    </properties> 
</persistence-unit> 

I definiert haben dies in meinem log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="DEBUG" verbose="true"> 
    <Appenders> 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%m%n" /> 
     </Console> 
     <File name="MyFile" fileName="test.log"> 
      <PatternLayout> 
       <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> 
      </PatternLayout> 
     </File> 
    </Appenders> 
    <Loggers> 
     <logger name="org.hibernate.SQL" level="DEBUG" additivity="false"> 
      <AppenderRef ref="STDOUT" /> 
      <AppenderRef ref="MyFile" /> 
     </logger> 
     <logger name="org.hibernate.type" level="TRACE" additivity="false"> 
      <AppenderRef ref="STDOUT" /> 
      <AppenderRef ref="MyFile" /> 
     </logger> 
     <Root level="TRACE"> 
      <AppenderRef ref="STDOUT" /> 
      <AppenderRef ref="MyFile" /> 
     </Root> 
    </Loggers> 
</Configuration> 
+0

Duplizieren von: http://stackoverflow.com/questions/1710476/print-query-string-in-hibernate-with-parameter-values ​​ –

+2

Es ist nicht. Ich habe die vorgeschlagenen Lösungen getestet und es hat nicht funktioniert. Ich denke, es ist mit der Version von Hibernate verknüpft. Hier ist, was ich in der Hibernate-Dokumentation gefunden habe: "Logging Wichtig Völlig veraltet. Hibernate verwendet JBoss Logging ab 4.0. Dies wird dokumentiert, wie wir diesen Inhalt in das Entwicklerhandbuch migrieren." – Abbadon

+0

Bitte aktualisieren Sie Ihre Frage mit Ihrer Protokollierungskonfiguration basierend auf den Tipps in dieser SO-Frage. JBoss Logging ist einfach eine Fassade für andere Logging-Frameworks, es ist intern das jboss-Logging-Framework, ähnlich dem, was SLF4J bietet. –

Antwort

2

Erstens, stellen Sie sicher, dass Sie die log4j-Kern -2.0, log4j-api-2.0 und log4j-1.2-api-2.0 jars im Klassenpfad.

Als nächstes ist JBoss-Unterstützung für Log4J2 relativ neu. Möglicherweise benötigen Sie JBoss Logging 3.1.4, um Log4J2 verwenden zu können (siehe JBLOGGING-94). Ab JBoss Logging 3.2 wird es Leistungsverbesserungen geben (siehe JBLOGGING-95) und Sie können möglicherweise das log4j-1.2-api-2.0 Bridge Jar weglassen.

Bitte beachten Sie, dass das aktuelle JBoss-Logging Beta1 (3.2.0.Beta1) beim Protokollieren eine NPE hat: JBLOGGING-107. Es kann also notwendig sein, Hibernate zu informieren, die slf4j-API mit der Systemeigenschaft org.jboss.logging.provider zu verwenden (siehe org.jboss.logging.LoggerProviders).

0
<!-- Echo all executed SQL to stdout --> 
     <property name="show_sql">true</property>