Configurer la journalisation D'hibernation à L'aide du fichier de configuration XML Log4j?

Je n'ai pas été en mesure de trouver de documentation sur la façon de configurer la journalisation D'Hibernate en utilisant le fichier de configuration de style XML pour Log4j.

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

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

EDIT:

Juste pour clarifier, je je suis à la recherche d'un exemple de la syntaxe XML actuelle pour contrôler L'hibernation.

Edit 2:

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 descendre et de contrôler la journalisation de l'hibernation d'une manière qui se distingue de ma journalisation au niveau de l'application, car elle inonde actuellement mes logs. J'ai trouvé des exemples de l'utilisation du fichier de préférences pour ce faire, j'ai je me demandais juste comment je pouvais faire ça dans un fichier XML.

80
demandé sur James McMahon 2009-01-12 20:40:33

6 réponses

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 coller dans un fichier de configuration 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: la plupart des loggers utilisent le niveau de débogage, cependant org.hiberner.le type utilise TRACE. Dans les versions précédentes de Hibernate org.hiberner.type également utilisé DEBUG, mais à partir de Hibernate 3, vous devez définir le niveau à tracer (ou tout) afin de voir la journalisation de liaison de paramètre JDBC.

et une catégorie est spécifiée comme telle:

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

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

146
répondu Loki 2015-03-27 19:28:12

Loki 's réponse les points à l'Hibernate 3 docs et fournit de bonnes informations, mais je n'étais toujours pas obtenir les résultats que j'attendais.

beaucoup de coups, des bras agités et des courses de souris mortes m'ont finalement fait tomber mon fromage.

parce que Hibernate 3 utilise simple Logging Facade for Java (SLF4J) (per the docs), si vous comptez sur Log4j 1.2 vous aurez aussi besoin du slf4j-log4j12-1.5.10.jar si vous voulez entièrement configurer L'hibernation avec un fichier de configuration log4j. Espérons que cela aide le gars à côté.

25
répondu Dennis S 2017-05-23 12:34:38

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>

Espérons que cette aide.

7
répondu James McMahon 2009-12-03 12:44:12

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 D'hibernation ;) -- mettez le niveau à "debug" pour obtenir la sortie.

5
répondu TMN 2009-03-12 16:19:58

les réponses étaient utiles. Après le changement, j'ai obtenu la journalisation en double des déclarations SQL, une dans le fichier log4j log et une sur la console standard. J'ai changé la persistance.fichier xml à-dire show_sql à false pour se débarrasser de la journalisation de la console standard. Garder format_sql true affecte aussi le fichier log4j, donc j'ai gardé cette true.

<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
répondu dc360 2012-07-25 18:58:31

vous pouvez configurer votre fichier log4j avec la balise category comme ceci (avec un appender console 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>

donc chaque avertissement, erreur ou message fatal d'hibernation sera affiché, rien de plus. Aussi, votre code et Code de bibliothèque sera au niveau info (donc info, warn, error et fatal)

Pour changer le niveau de journal d'une bibliothèque, il suffit d'ajouter une catégorie, par exemple, à desactive printemps info journal:

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

ou avec un autre accessoire, briser l'additivité (la valeur par défaut de l'additivité est vraie)

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

et si vous ne voulez pas que le journal d'hibernation chaque requête, mettez la propriété d'hibernation show_sql à false .

0
répondu Emilien Brigand 2013-10-09 14:05:11