Мне не удалось найти никакой документации о том, как настроить ведение журнала Hibernate с использованием файла конфигурации стиля XML для Log4j.
Возможно ли это, или я должен использовать файл конфигурации стиля свойств для управления ведением журнала Hibernate?
Если у кого-то есть какая-либо информация или ссылки на документацию, это будет полезно.
РЕДАКТИРОВАТЬ:
Чтобы уточнить, я ищу пример фактического синтаксиса XML для управления Hibernate.
EDIT2:
вот что у меня есть в моем файле конфигурации XML.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="info"/>
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/>
</layout>
</appender>
<appender name="rolling-file" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="Program-Name.log"/>
<param name="MaxFileSize" value="1000KB"/>
<!-- Keep one backup file -->
<param name="MaxBackupIndex" value="4"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="console" />
<appender-ref ref="rolling-file" />
</root>
</log4j:configuration>
Ведение журнала работает нормально, но я ищу способ уйти и контролировать ведение журнала гибернации способом, отличным от ведения журнала на уровне приложения, поскольку в настоящее время он наводняет мои журналы. Я нашел примеры использования файла настроек для этого, мне просто было интересно, как я могу сделать это в файле XML.
Ответы:
Из http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-logging
Вот список категорий логгеров:
Отформатирован для вставки в XML-файл конфигурации log4j:
<!-- Log all SQL DML statements as they are executed --> <Logger name="org.hibernate.SQL" level="debug" /> <!-- Log all JDBC parameters --> <Logger name="org.hibernate.type" level="debug" /> <!-- Log all SQL DDL statements as they are executed --> <Logger name="org.hibernate.tool.hbm2ddl" level="debug" /> <!-- Log the state of all entities (max 20 entities) associated with the session at flush time --> <Logger name="org.hibernate.pretty" level="debug" /> <!-- Log all second-level cache activity --> <Logger name="org.hibernate.cache" level="debug" /> <!-- Log transaction related activity --> <Logger name="org.hibernate.transaction" level="debug" /> <!-- Log all JDBC resource acquisition --> <Logger name="org.hibernate.jdbc" level="debug" /> <!-- Log HQL and SQL ASTs during query parsing --> <Logger name="org.hibernate.hql.ast.AST" level="debug" /> <!-- Log all JAAS authorization requests --> <Logger name="org.hibernate.secure" level="debug" /> <!-- Log everything (a lot of information, but very useful for troubleshooting) --> <Logger name="org.hibernate" level="debug" />
NB: большинство регистраторов используют уровень DEBUG, однако org.hibernate.type использует TRACE. В предыдущих версиях Hibernate org.hibernate.type также использовалась DEBUG, но в Hibernate 3 вы должны установить уровень TRACE (или ALL), чтобы увидеть регистрацию привязки параметров JDBC.
И категория указывается как таковая:
<logger name="org.hibernate"> <level value="ALL" /> <appender-ref ref="FILE"/> </logger>
Его необходимо разместить перед корневым элементом.
источник
org.hibernate.engine.transaction
. См .: docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/…L
, например, на<Logger name="org.hibernate.SQL" level="debug" />
самом деле использовать заглавные буквы? Я получаю сообщение об ошибке в Tomcat при запуске при использовании заглавной буквы L :"The content of element type 'log4j:configuration' must match '(renderer*,throwableRenderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)'."
. Я также не понимаю, как это должно быть введено в мой файл log4j.xml. Должен ли я иметь отдельный<logger>
блок для каждой категории с<level>
тегами, или мне можно обойтись однострочниками, которые вы представили?Loki «s ответ указывает на документы Hibernate 3 и обеспечивает хорошую информацию, но я до сих пор не получают результаты , которые я ожидал.
Из-за долгих ударов, размахивания руками и бега дохлой мыши я наконец получил свой сыр.
Поскольку Hibernate 3 использует Simple Logging Facade для Java (SLF4J) (согласно документации), если вы полагаетесь на Log4j 1.2, вам также понадобится slf4j-log4j12-1.5.10.jar, если вы хотите полностью настроить ведение журнала Hibernate с файл конфигурации log4j. Надеюсь, это поможет следующему парню.
источник
В ответ на комментарий homaxto, это то, что у меня есть прямо сейчас.
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Threshold" value="debug"/> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/> </layout> </appender> <appender name="rolling-file" class="org.apache.log4j.RollingFileAppender"> <param name="file" value="Program-Name.log"/> <param name="MaxFileSize" value="500KB"/> <param name="MaxBackupIndex" value="4"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n"/> </layout> </appender> <logger name="org.hibernate"> <level value="info" /> </logger> <root> <priority value ="debug" /> <appender-ref ref="console" /> <appender-ref ref="rolling-file" /> </root> </log4j:configuration>
Ключевая часть
<logger name="org.hibernate"> <level value="info" /> </logger>
Надеюсь это поможет.
источник
Вот что я использую:
<logger name="org.hibernate"> <level value="warn"/> </logger> <logger name="org.hibernate.SQL"> <level value="warn"/> </logger> <logger name="org.hibernate.type"> <level value="warn"/> </logger> <root> <priority value="info"/> <appender-ref ref="C1"/> </root>
Очевидно, мне не нравится видеть сообщения Hibernate;) - установите уровень «отладка», чтобы получить результат.
источник
Ответы были полезны. После изменения я получил дублирующуюся запись операторов SQL, одну в файл журнала log4j и одну в стандартную консоль. Я изменил файл persistence.xml, чтобы указать show_sql на false, чтобы избавиться от ведения журнала из стандартной консоли. Сохранение значения format_sql также влияет на файл журнала log4j, поэтому я оставил это верным.
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="myUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/> <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:file:d:\temp\database\cap1000;shutdown=true"></property> <property name="dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.show_sql" value="false"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> </properties> </persistence-unit> </persistence>
источник
Вы можете настроить свой
log4j
файл с помощью тега категории следующим образом (например, с помощью консольного приложения):<appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss} %p %c - %m%n" /> </layout> </appender> <category name="org.hibernate"> <priority value="WARN" /> </category> <root> <priority value="INFO" /> <appender-ref ref="console" /> </root>
Таким образом, каждое предупреждение, сообщение об ошибке или фатальное сообщение из спящего режима будет отображаться, не более того. Кроме того, ваш код и код библиотеки будут на информационном уровне (так что информация, предупреждение, ошибка и фатальный)
Чтобы изменить уровень журнала библиотеки, просто добавьте категорию, например, в журнал неактивной информации Spring:
<category name="org.springframework"> <priority value="WARN" /> </category>
Или с другим приложением, сломайте аддитивность (значение аддитивности по умолчанию истинно)
<category name="org.springframework" additivity="false"> <priority value="WARN" /> <appender-ref ref="anotherAppender" /> </category>
И если вы не хотите, чтобы этот спящий режим регистрировал каждый запрос, установите для свойства hibernate
show_sql
значениеfalse
.источник