Настройка ведения журнала Hibernate с использованием файла конфигурации XML Log4j?

Мне не удалось найти документацию о том, как настроить ведение журнала Hibernate с помощью файла конфигурации стиля XML для Log4j.

Возможно ли это, или я использую файл конфигурации стиля стиля для управления протоколом Hibernate?

Если у кого-то есть какая-либо информация или ссылки на документацию, это будет оценено.

EDIT:
Чтобы уточнить, я ищу пример фактического синтаксиса 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 файле.

Ответ 1

От http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-logging

Здесь список категорий регистратора:

Category                    Function

org.hibernate.SQL           Log all SQL DML statements as they are executed
org.hibernate.type          Log all JDBC parameters
org.hibernate.tool.hbm2ddl  Log all SQL DDL statements as they are executed
org.hibernate.pretty        Log the state of all entities (max 20 entities) associated with the session at flush time
org.hibernate.cache         Log all second-level cache activity
org.hibernate.transaction   Log transaction related activity
org.hibernate.jdbc          Log all JDBC resource acquisition
org.hibernate.hql.ast.AST   Log HQL and SQL ASTs during query parsing
org.hibernate.secure        Log all JAAS authorization requests
org.hibernate               Log everything (a lot of information, but very useful for troubleshooting) 

Отформатирован для вставки в файл конфигурации 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" />

Примечание. Большинство регистраторов используют уровень 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>

Он должен быть помещен перед корневым элементом.

Ответ 2

Loki answer указывает на документы Hibernate 3 и предоставляет хорошую информацию, но я все еще был не получив ожидаемых результатов.

Многое избиение, размахивание руками и общие мертвые мыши пробегали, наконец, принесли мне мой сыр.

Поскольку Hibernate 3 использует Простой фаза ведения журнала для Java (SLF4J) (в документах), , если вы полагаетесь на Log4j 1.2, вам будет и нужен slf4j-log4j12-1.5.10.jar, если вы хотите полностью настроить ведение журнала Hibernate с конфигурационным файлом log4j. Надеюсь, это поможет следующему парню.

Ответ 3

В ответ на комментарий 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>

Надеюсь, что это поможет.

Ответ 4

Вот что я использую:

<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;) - установите уровень "debug", чтобы получить результат.

Ответ 5

Ответы были полезны. После этого изменения я получил дублирующее ведение SQL-запросов, одно в log4j файле журнала и одно на стандартной консоли. Я изменил файл persistence.xml, чтобы сказать show_sql в false, чтобы избавиться от ведения журнала со стандартной консоли. Хранение format_sql true также влияет на файл журнала 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>

Ответ 6

Вы можете настроить ваш файл 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 info log:

<category name="org.springframework">
    <priority value="WARN" />
</category>

Или с другим добавлением, сломайте аддитивность (значение по умолчанию для аддитивности истинно)

<category name="org.springframework" additivity="false">
    <priority value="WARN" />
    <appender-ref ref="anotherAppender" />
</category>

И если вы не хотите, чтобы этот hibernate регистрировал каждый запрос, установите для свойства hibernate show_sql значение false.