it-swarm.dev

Konfigurace protokolování Hibernate pomocí konfiguračního souboru Log4j XML?

Nebyl jsem schopen najít žádnou dokumentaci, jak konfigurovat protokolování Hibernate pomocí konfiguračního souboru ve stylu XML pro Log4j.

Je to vůbec možné, nebo mám použít konfigurační soubor ve stylu vlastností ke kontrole protokolování Hibernate?

Pokud má někdo nějaké informace nebo odkazy na dokumentaci, ocenil by.

UPRAVIT:
Jen abych objasnil, hledám příklad skutečné syntaxe XML pro ovládání režimu spánku.

EDIT2:
Zde je to, co mám v konfiguračním souboru 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>

Protokolování funguje dobře, ale já hledám způsob, jak postupovat dolů a ovládat hibernaci tak, aby se oddělila od protokolování na úrovni aplikace, protože právě zaplavuje mé protokoly. Našel jsem příklady použití souboru preferencí k tomu, byl jsem jen přemýšlel, jak to můžu udělat v souboru XML.

83
James McMahon

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

Zde je seznam kategorií 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) 

Formátovaný pro vkládání do konfiguračního souboru 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" />

Poznámka: Většina loggerů používá úroveň DEBUG, nicméně org.hibernate.type používá TRACE. V předchozích verzích Hibernate org.hibernate.type také používal DEBUG, ale jako Hibernate 3 musíte nastavit úroveň na TRACE (nebo ALL), abyste viděli protokolování vázání parametrů JDBC.

Kategorie je určena jako taková:

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

Musí být umístěn před kořenovým prvkem.

151
Loki

Loki 's odpověď ukazuje na Hibernate 3 dokumenty a poskytuje dobré informace, ale stále jsem nedostal výsledky, které jsem očekával. 

Hodně mumlajících, mávajících zbraní a běžících mrtvých myší mi konečně přistálo můj sýr. 

Protože Hibernate 3 používá Simple Logging Facade for Java (SLF4J) (na dokumentech), if spoléháte na Log4j 1.2, budete potřebovat také potřebovat slf4j-log4j12-1.5.10.jar pokud chcete plně konfigurovat protokolování režimu spánku pomocí konfiguračního souboru log4j. Doufám, že to pomůže dalšímu chlapovi.

25
Dennis S

V reakci na komentář homaxto to je to, co mám právě teď.

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

Klíčovou součástí je 

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

Snad to pomůže.

7
James McMahon

Zde používám:

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

Je zřejmé, že nechci vidět Hibernate zprávy;) - nastavit úroveň na "ladění" dostat výstup.

5
TMN

Odpovědi byly užitečné. Po změně jsem dostal duplicitní protokolování SQL příkazů, jeden v log4j log souboru a jeden na standardní konzoli. Změnil jsem soubor persistence.xml a řekl show_sql na hodnotu false, aby se zbavil protokolování ze standardní konzoly. Vedení formátu format_sql true ovlivňuje také log4j log soubor, takže jsem si to zachoval.

<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

Soubor log4j můžete nakonfigurovat tak, aby obsahoval značku kategorie (s příkladem konzoly pro konzoli):

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

Zobrazí se tedy každé varování, chyba nebo fatální zpráva z režimu spánku, nic víc. Váš kód a kód knihovny budou také v informační úrovni (informace, upozornění, chyby a fatální chyby)

Chcete-li změnit úroveň protokolu knihovny, stačí přidat kategorii, například do neaktivního protokolu informací o jaře:

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

Nebo s jiným appenderem přerušte aditivitu (výchozí hodnota additivity je true)

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

A pokud nechcete, aby hibernace zaznamenávala každý dotaz, nastavte vlastnost hibernace show_sql na false.

0
Emilien Brigand