it-swarm.com.de

Hibernate-Protokollierung mithilfe der XML-Konfigurationsdatei Log4j konfigurieren?

Ich konnte keine Dokumentation zur Konfiguration der Protokollierung von Hibernate mithilfe der XML-Konfigurationsdatei für Log4j finden.

Ist dies überhaupt möglich oder verwende ich eine Konfigurationsdatei mit Eigenschaftsstil, um die Protokollierung von Hibernate zu steuern?

Wenn jemand Informationen oder Links zur Dokumentation hat, würde es sich freuen.

BEARBEITEN:
.__ Um nur zu klären, suche ich ein Beispiel für die tatsächliche XML-Syntax zur Steuerung von Hibernate.

EDIT2:
Folgendes habe ich in meiner XML-Konfigurationsdatei.

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

Die Protokollierung funktioniert gut, aber ich suche nach einer Möglichkeit, die Ruhezustandsprotokollierung auf eine andere Weise als die Protokollierung auf Anwendungsebene abzuspalten und zu steuern, da derzeit meine Protokolle überflutet werden. Ich habe Beispiele für die Verwendung der Voreinstellungsdatei gefunden, ich habe mich nur gefragt, wie ich dies in einer XML-Datei tun kann.

83
James McMahon

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

Hier ist die Liste der Logger-Kategorien:

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) 

Für das Einfügen in eine log4j-XML-Konfigurationsdatei formatiert:

<!-- 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" />

Hinweis: Die meisten Logger verwenden die DEBUG-Ebene, org.hibernate.type verwendet jedoch TRACE. In früheren Versionen von Hibernate org.hibernate.type wurde auch DEBUG verwendet. Ab Hibernate 3 müssen Sie jedoch die Stufe auf TRACE (oder ALL) setzen, um die Protokollierung der JDBC-Parameterbindung anzuzeigen.

Und eine Kategorie wird als solche angegeben:

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

Es muss vor dem Wurzelelement platziert werden.

151
Loki

Loki 's answer weist auf die Hibernate 3-Dokumente hin und liefert gute Informationen, aber ich erhielt immer noch nicht die erwarteten Ergebnisse. 

Vieles Schlagen, Wehklopfen und generell tote Mausrennen brachte mich schließlich zu meinem Käse. 

Da Hibernate 3 Simple Logging Facade für Java (SLF4J) (gemäß den Dokumenten) verwendet, benötigen Sie if, die Sie auf Log4j 1.2 setzen. Sie benötigen auch die slf4j-log4j12-1.5.10.jar, wenn Sie vollständig Hibernate-Protokollierung mit einer Konfigurationsdatei von log4j konfigurieren möchten. Hoffe das hilft dem nächsten Kerl.

25
Dennis S

Als Antwort auf den Kommentar von homaxto habe ich das jetzt.

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

Der Schlüssel zum Sein 

<logger name="org.hibernate">
    <level value="info" />
</logger>

Hoffe das hilft.

7
James McMahon

Ich verwende Folgendes:

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

Offensichtlich sehe ich keine Hibernate-Meldungen;) - Stellen Sie den Pegel auf "debug", um die Ausgabe zu erhalten.

5
TMN

Die Antworten waren nützlich. Nach der Änderung erhielt ich eine doppelte Protokollierung von SQL-Anweisungen, eine in der log4j-Protokolldatei und eine in der Standardkonsole. Ich habe die Datei persistence.xml geändert, um show_sql in false zu ändern, um die Protokollierung von der Standardkonsole zu entfernen. Wenn Sie format_sql auf true halten, wirkt sich dies auch auf die log4j-Protokolldatei aus.

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

Sie können Ihre log4j-Datei mit dem category-Tag wie folgt konfigurieren (mit einem Konsolen-Appender für das Beispiel):

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

Daher wird jede Warnung, jede Fehlermeldung oder eine schwerwiegende Meldung aus dem Ruhezustand angezeigt, mehr nicht. Außerdem befinden sich Ihr Code und der Bibliothekscode auf Info-Ebene (also info, warn, error und fatal).

Um den Log-Level einer Bibliothek zu ändern, fügen Sie einfach eine Kategorie hinzu, z. B. zum inaktiven Spring-Info-Log:

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

Oder brechen Sie die Additivität mit einem anderen Appender (Standardwert für Additivität ist true).

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

Wenn Sie nicht möchten, dass dieser Ruhezustand jede Abfrage protokolliert, setzen Sie die Ruhezustandseigenschaft show_sql auf false.

0
Emilien Brigand