2014-02-13 4 views
5

Я использую log4j2 с slf4j и hibernate 4.3.1. У меня возникли проблемы с отображением параметров SQL-запросов. Я не нашел anywayt, чтобы показать их (SQL-запросы хорошо показаны, но без параметров). Вот то, что я указал в моем persistence.xml:Hibernate 4.3 показать параметры SQL

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

Я определил это в моем 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

Дубликат: http://stackoverflow.com/questions/1710476/print-query-string-in-hibernate-with-parameter-values ​​ –

+2

Это не так. Я протестировал предлагаемые решения и не работал. Я думаю, что это связано с версией спящего режима. Вот что я нашел в документации на гибернацию: «Регистрация Важно Полностью устаревший. Hibernate использует JBoss Logging начиная с 4.0. Это будет задокументировано, когда мы перенесем этот контент в Руководство разработчика». – Abbadon

+0

Обновите свой вопрос с помощью конфигурации ведения журнала, основываясь на советах в этом вопросе SO. JBoss Logging - это просто фасад для других фреймворков регистрации, это внутренняя структура ведения журнала jboss, аналогичная тому, что предоставляет SLF4J. –

ответ

2

Во-первых, убедитесь, что у вас есть log4j-ядро -2.0, log4j-api-2.0 и log4j-1.2-api-2.0 в пути к классам.

Далее, поддержка JBoss для Log4J2 довольно недавно. Вам может понадобиться JBoss Logging 3.1.4, чтобы иметь возможность использовать Log4J2 (см. JBLOGGING-94). Из JBoss Logging 3.2 будут улучшения производительности (см. JBLOGGING-95), и вы можете опустить мостовую банку log4j-1.2-api-2.0.

Обратите внимание, что текущая бета-версия JBoss-Logging Beta1 (3.2.0.Beta1) имеет NPE при регистрации: JBLOGGING-107. Поэтому, возможно, необходимо указать hibernate для использования API slf4j с использованием системного свойства org.jboss.logging.provider (см. Org.jboss.logging.LoggerProviders).

0
<!-- Echo all executed SQL to stdout --> 
     <property name="show_sql">true</property> 
Смежные вопросы