Question

Je n'ai trouvé aucune documentation sur la configuration de la journalisation d'Hibernate à l'aide du fichier de configuration de style XML pour Log4j.

Est-ce même possible ou dois-je utiliser un fichier de configuration de style de propriétés pour contrôler la journalisation d'Hibernate?

Si quelqu'un a des informations ou des liens vers de la documentation, cela serait apprécié.

MODIFIER:
Juste pour clarifier, je cherche un exemple de la syntaxe XML réelle pour contrôler Hibernate.

EDIT2:
Voici ce que j'ai dans mon fichier de configuration 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>

La journalisation fonctionne bien, mais je cherche un moyen de quitter et de contrôler la journalisation de l'hibernation de manière à la séparer de la journalisation au niveau de l'application, car elle inonde actuellement mes journaux. J'ai trouvé des exemples d'utilisation du fichier de préférences à cette fin. Je me demandais simplement comment je pouvais le faire dans un fichier XML.

Était-ce utile?

La solution

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

Voici la liste des catégories d’enregistreurs:

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) 

Formaté pour le collage dans un fichier de configuration 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" />

Remarque: la plupart des enregistreurs utilisent le niveau DEBUG. Cependant, org.hibernate.type utilise TRACE. Dans les versions précédentes de Hibernate, org.hibernate.type utilisait également DEBUG, mais à partir de Hibernate 3, vous devez définir le niveau sur TRACE (ou ALL) afin d'afficher la journalisation de la liaison des paramètres JDBC.

Et une catégorie est spécifiée en tant que telle:

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

Il doit être placé avant l'élément racine.

Autres conseils

Loki 's answer pointe vers la documentation d'Hibernate 3 et fournit de bonnes informations, mais je n'obtenais toujours pas les résultats escomptés.

De nombreuses bagarres, agitations des bras et courses de souris mortes ont fini par me poser mon fromage.

Etant donné que Hibernate 3 utilise Facade de journalisation simple pour Java (SLF4J) (conformément à la documentation), < strong> si vous utilisez Log4j 1.2, vous aurez également besoin de slf4j-log4j12-1.5.10.jar si vous souhaitez pleinement configurez la journalisation Hibernate avec un fichier de configuration log4j. J'espère que cela aidera le prochain gars.

En réponse au commentaire de homaxto, voici ce que j'ai en ce moment.

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

L'élément clé étant

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

J'espère que cela vous aidera.

Voici ce que j'utilise:

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

Évidemment, je n'aime pas voir les messages Hibernate;) - définissez le niveau sur "debug". pour obtenir le résultat.

Les réponses ont été utiles. Après le changement, la journalisation en double des instructions SQL a été dupliquée, une dans le fichier journal log4j et une dans la console standard. J'ai modifié le fichier persistence.xml pour indiquer show_sql sur false afin de supprimer la journalisation à partir de la console standard. Conserver format_sql affecte également le fichier journal log4j, je l’ai donc conservé.

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

Vous pouvez configurer votre fichier log4j avec la balise category telle que celle-ci (avec un console d'application pour l'exemple):

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

Ainsi, chaque message d’avertissement, d’erreur ou fatal de Hibernate sera affiché, rien de plus. De plus, votre code et le code de votre bibliothèque seront au niveau info (donc info, warn, error et fatal)

Pour modifier le niveau de journalisation d'une bibliothèque, ajoutez simplement une catégorie, par exemple, au journal des informations de ressort désactif:

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

Ou avec un autre utilisateur, casser l'additivité (la valeur par défaut de l'additivité est true)

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

Et si vous ne souhaitez pas que le journal de veille prolongée consomme toutes les requêtes, définissez la propriété de veille prolongée show_sql sur false .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top