Konfigurowanie logowania hibernacji za pomocą pliku konfiguracyjnego Log4j XML?

Nie udało mi się znaleźć żadnej dokumentacji, jak skonfigurować logowanie Hibernate za pomocą pliku konfiguracyjnego w stylu XML dla Log4j.

Czy jest to w ogóle możliwe, Czy mam użyć pliku konfiguracyjnego w stylu properties do kontrolowania logowania Hibernate?

Jeśli ktoś ma jakieś informacje lub linki do dokumentacji to byłby mile widziany.

EDIT:
Dla jasności, Szukam przykładu rzeczywistej składni XML do sterowania Hibernacja.

EDIT2:
Oto, co mam w moim pliku konfiguracyjnym 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>

Logowanie działa dobrze, ale szukam sposobu, aby ustąpić i kontrolować logowanie hibernate w sposób oddzielający się od logowania na poziomie mojej aplikacji, ponieważ obecnie zalewa moje dzienniki. Znalazłem przykłady użycia pliku preferencji do tego celu, zastanawiałem się tylko, jak Mogę to zrobić w pliku XML.

Author: James McMahon, 2009-01-12

6 answers

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

Oto lista kategorii loggera:

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) 

Sformatowane do wklejenia do pliku konfiguracyjnego log4j XML:

<!-- 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: Większość loggerów używa poziomu debugowania, jednak org.hibernacja.typ wykorzystuje ślad. W poprzednich wersjach Hibernate org.hibernacja.wpisz również DEBUG, ale od Hibernate 3 Musisz ustawić poziom na TRACE (lub ALL) w aby zobaczyć rejestrowanie wiązań parametrów JDBC.

I kategoria jest określona jako taka:

<logger name="org.hibernate">
    <level value="ALL" />
    <appender-ref ref="FILE"/>
</logger>

Musi być umieszczony przed elementem głównym.

 146
Author: Loki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-27 19:28:12

ODPOWIEDŹ Loki wskazuje na dokumenty Hibernate 3 i dostarcza dobrych informacji, ale i tak nie otrzymywałem oczekiwanych rezultatów.

Wielkie bicie, machanie ramionami i generał martwy mysz w końcu wylądował mi ser.

Ponieważ Hibernate 3 używa Simple Logging Facade for Java (SLF4J) (zgodnie z dokumentami), Jeśli polegasz na Log4j 1.2 będziesz również potrzebujesz slf4j-log4j12-1.5.10.jar jeśli chcesz w pełni skonfiguruj rejestrowanie hibernacji za pomocą pliku konfiguracyjnego log4j. Mam nadzieję, że to pomoże kolejnemu.

 25
Author: Dennis S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:38

W odpowiedzi na komentarz homaxto, to jest to, co mam teraz.

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

Kluczową częścią jest

<logger name="org.hibernate">
    <level value="info" />
</logger>
Mam nadzieję, że to pomoże.
 7
Author: James McMahon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-03 12:44:12

Oto czego używam:

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

Oczywiście nie lubię widzieć wiadomości Hibernate ;) -- ustaw poziom na "debug", aby uzyskać wynik.

 5
Author: TMN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-12 16:19:58

Odpowiedzi były przydatne. Po zmianie otrzymałem zduplikowane logowanie poleceń SQL, jedno w pliku log4j log, a drugie na standardowej konsoli. Zmieniłem upór.plik xml mówiący show_sql na false, aby pozbyć się logowania ze standardowej konsoli. Zachowanie True format_sql wpływa również na plik dziennika log4j, więc zachowałem to prawda.

<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>
 3
Author: dc360,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-25 18:58:31

Możesz skonfigurować plik log4j z tagiem category w następujący sposób (za pomocą aplikacji konsolowej dla przykładu):

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

Więc każde ostrzeżenie, błąd lub fatal wiadomość z hibernate będą wyświetlane, nic więcej. Ponadto, Twój kod i kod biblioteki będą na poziomie info (tak info, warn, error i fatal)

Aby zmienić poziom dziennika biblioteki, wystarczy dodać kategorię, na przykład do dziennika informacji desactive spring:

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

Lub za pomocą innego appendera przełamać addytywność (addytywność wartość domyślna to true)

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

I jeśli nie chcesz, aby hibernate logował każde zapytanie, ustaw właściwość hibernate show_sql na false.

 0
Author: Emilien Brigand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 14:05:11