Как регистрировать параметры гибернации
У меня есть проект JPA. Мои логи выглядят так:
Hibernate: insert into TEST(DESCRIPTION, NAME, version, id) values (?, ?, ?, ?)
[08/12/14 06:26:26:026 GET] TRACE sql.BasicBinder: binding parameter [1] as [VARCHAR] - [desc]
[08/12/14 06:26:26:026 GET] TRACE sql.BasicBinder: binding parameter [2] as [VARCHAR] - [name]
[08/12/14 06:26:26:026 GET] TRACE sql.BasicBinder: binding parameter [3] as [INTEGER] - [0]
[08/12/14 06:26:26:026 GET] TRACE sql.BasicBinder: binding parameter [4] as [BIGINT] - [21]
У меня есть след org.hibernate.type в конфигурации log4j. Это хорошо, но есть ли способ написать этот тип вывода?
Hibernate: insert into TEST(DESCRIPTION, NAME, version, id) values (desc, name, 0, 21)
Я искал, что в Google, я не могу найти решение такого типа. Этот вывод выглядит читабельным и легко читаемыми файлами журналов. Почему это не Hibenrate?
Моя конфигурация такая:
<category name="org.hibernate.type">
<priority value="trace" />
</category>
2 ответа
Решение
Я сомневаюсь, что это могло быть возможно из коробки из Hibernate. Вы можете явно проксировать соединение, оператор и подготовленные операторы, созданные вашим приложением (используя шаблон проектирования декоратора), и регистрировать переданные параметры.
Используйте slf4j + Log4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version> <!-- Use the latest version instead -->
</dependency>
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 option
log4j.rootLogger=INFO, file, stdout
# Log everything. Good for troubleshooting
log4j.logger.org.hibernate=INFO
# Log all JDBC parameters
log4j.logger.org.hibernate.type=ALL
hibernate.cfg.xml
<property name="show_sql">true</property>
Теперь параметры будут зарегистрированы.