Domanda

Non sono stato in grado di trovare alcuna documentazione su come configurare la registrazione di Hibernate utilizzando il file di configurazione in stile XML per Log4j.

È possibile o devo usare un file di configurazione in stile proprietà per controllare la registrazione di Hibernate?

Se qualcuno ha qualche informazione o link alla documentazione, questo sarebbe apprezzato.

Modifica
Giusto per chiarire, sto cercando un esempio dell'attuale sintassi XML per controllare Hibernate.

EDIT2:
Ecco cosa ho nel mio file di configurazione 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 registrazione funziona bene, ma sto cercando un modo per dimettermi e controllare la registrazione in letargo in modo separato dalla registrazione a livello di applicazione, poiché attualmente sta invadendo i miei registri. Ho trovato esempi di utilizzo del file delle preferenze per farlo, mi stavo solo chiedendo come posso farlo in un file XML.

È stato utile?

Soluzione

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

Ecco l'elenco delle categorie di logger:

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) 

Formattato per incollare in un file di configurazione 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" />

NB: la maggior parte dei logger utilizza il livello DEBUG, tuttavia org.hibernate.type usa TRACE. Nelle versioni precedenti di Hibernate org.hibernate.type utilizzava anche DEBUG, ma a partire da Hibernate 3 è necessario impostare il livello su TRACE (o ALL) per visualizzare la registrazione dell'associazione dei parametri JDBC.

E una categoria è specificata come tale:

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

Deve essere posizionato prima dell'elemento root.

Altri suggerimenti

Loki 's rispondi indica i documenti di Hibernate 3 e fornisce buone informazioni, ma non riuscivo ancora a ottenere i risultati che mi aspettavo.

Molto agitarsi, agitare le braccia e le corse dei topi morti in genere mi hanno finalmente fatto cadere il mio formaggio.

Poiché Hibernate 3 sta utilizzando Simple Logging Facade for Java (SLF4J) (per la documentazione), < strong> se fai affidamento su Log4j 1.2, avrai anche necessario slf4j-log4j12-1.5.10.jar se desideri completamente configura Hibernate logging con un file di configurazione log4j. Spero che questo aiuti il ??prossimo.

In risposta al commento di Homaxto, questo è quello che ho adesso.

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

Parte chiave

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

Spero che questo aiuti.

Ecco cosa uso:

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

Ovviamente, non mi piace vedere i messaggi di ibernazione;) - imposta il livello su " debug " per ottenere l'output.

Le risposte sono state utili. Dopo la modifica, ho ottenuto la registrazione duplicata delle istruzioni SQL, una nel file di registro log4j e una sulla console standard. Ho modificato il file persistence.xml per dire show_sql su false per eliminare la registrazione dalla console standard. Mantenere format_sql true influisce anche sul file di registro log4j, quindi l'ho mantenuto vero.

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

Puoi configurare il tuo file log4j con il tag di categoria come questo (con un appender per console per esempio):

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

Quindi ogni messaggio di avvertimento, errore o fatale da ibernazione verrà visualizzato, niente di più. Inoltre, il codice e il codice della libreria saranno a livello di informazioni (quindi informazioni, avvisa, errore e fatale)

Per modificare il livello di registro di una libreria, è sufficiente aggiungere una categoria, ad esempio, al registro delle informazioni di primavera desattivo:

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

O con un altro appender, interrompi l'additività (il valore predefinito dell'additività è vero)

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

E se non si desidera che tale ibernazione registri ogni query, impostare la proprietà di ibernazione show_sql su false .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top