Включить файл свойств log4j в hibernate, чтобы показать запрос со значением вместо вопросительного знака

У меня есть файл crearte log4j.properties, как показано ниже:

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug

log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE

Может ли кто-нибудь помочь мне включить его в файл hibernate.cfg.xml? Мне жаль, что я действительно не знаю, как работает log4j. Я создаю это для отображения моего запроса на спящий режим с value вместо ?, но все же он отображает ? ничего не меняется, поэтому мне нужно продолжить дальше?

Я взял здесь ссылку Hibernate show real SQL

Ответы

Ответ 1

Свойство 'show_sql' в вашем файле hibernate.cfg.xml заставляет запросы печататься непосредственно на консоли.

Log4j позволяет выводить данные в любом месте от консоли до файла на сетевые порты в базы данных. Но простая конфигурация, которую у вас есть, также должна печататься на консоли. Поэтому сначала удалите свойство show_sql, чтобы увидеть, что Log4j вообще что-то помещает в консоль.

Если это не работает, это показывает, что Log4j настроен неправильно. Если вы используете hibernate > 3.5, он использует slf4j api, который по умолчанию использует logback вместо log4j. Вы можете легко переключиться на log4j, удалив баночки из вашего пути к классам и добавив вместо этого slf4j-log4j12.jar и log4j.jar.

Трассировка Log4j также печатает запросы с помощью '?', но также печатает привязки параметров, то есть, что '?' будет заменен драйвером базы данных или сервером.

Ответ 2

Пожалуйста, обратитесь к справочной системе hibernate в соответствии с вашей версией. Вот 3.3 Ссылка

Изменить: -

  • Для настройки ведения журнала вам понадобится slf4j-api.jar в вашем classpath вместе с файлом jar для вашего предпочтительного связывания - slf4j-log4j12.jar в случае Log4J.
  • Поместите файл log4j.properties в свой путь к классам. Файл свойств примера с Hibernate в каталоге src/.
  • Включить следующие категории журнала 4j.

    org.hibernate.SQL   Log all SQL DML statements as they are executed
    
    org.hibernate.type  Log all JDBC parameters
    

Ответ 3

В большинстве случаев должно быть достаточно включить log4j.properties в путь класса приложения.

См. Как правильно инициализировать log4j?.

Эта ссылка уже предлагает, что вы должны искать связанные значения sql param, а не в тексте sql, в отдельных операторах журналов, например: TRACE [BasicBinder] binding parameter [1] as [VARCHAR] - john doe.

Но я рекомендую придерживаться log4jdbc. Он довольно прост в использовании. И он способен встроить значения параметров запроса в напечатанный текст sql.

Ответ 4

Добавьте это также

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>

ваша проблема будет исправлена.

Ответ 6

Вы не можете распечатать значения inline. Hibernate всегда будет печатать? при регистрации запросов. Результат регистрации org.hibernate.type на уровне DEBUG показывает значения и типы, которые используются для замены этих вопросительных знаков.

Ответ 8

В моем случае он не был hibernate.cfg.xml, это был файл log4j.xml, где я поместил код, указанный @jdev

< свойство name= "show_sql" > true Показывает SQL-запросы

< свойство name= "format_sql" > true Отформатируйте запрос, отображаемый на консоли

< свойство name= "use_sql_comments" > true комментарии будут добавлены к запросам

Если ваш проект имеет 1000 запросов на печать на консоли, сделайте другие ложными:   < свойство name= "show_sql" > true  < свойство name= "format_sql" > false  < свойство name= "use_sql_comments" > false

ИЛИ напишите appender в log4j.xml, который я сделал в моем проекте, просто для того, чтобы написать все SQL-запросы в отдельном текстовом файле, который указан здесь: Настройка ведения журнала Hibernate с использованием файла конфигурации XML Log4j?