web-dev-qa-db-ja.com

Log4j XML構成ファイルを使用してHibernateロギングを構成しますか?

Log4jのXMLスタイルの構成ファイルを使用してHibernateのログを構成する方法に関するドキュメントを見つけることができませんでした。

これは可能ですか、またはプロパティスタイルの構成ファイルを使用してHibernateのログを制御していますか?

誰かが情報やドキュメントへのリンクを持っているなら、それはありがたいです。

編集:
明確にするために、Hibernateを制御する実際のXML構文の例を探しています。

EDIT2:
これは、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>

ロギングは正常に機能しますが、現在はログをあふれさせているため、アプリケーションレベルのロギングとは別の方法で休止状態ロギングをステップダウンして制御する方法を探しています。設定ファイルを使用してこれを行う例を見つけましたが、XMLファイルでこれをどのように行うことができるのか疑問に思っていました。

85
James McMahon

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

ロガーカテゴリのリストは次のとおりです。

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) 

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

注意:ほとんどのロガーはDEBUGレベルを使用しますが、org.hibernate.typeはTRACEを使用します。 Hibernateの以前のバージョンではorg.hibernate.typeもDEBUGを使用していましたが、Hibernate 3では、JDBCパラメーターバインディングロギングを表示するためにレベルをTRACE(またはALL)に設定する必要があります。

そして、カテゴリはそのように指定されます:

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

ルート要素の前に配置する必要があります。

154
Loki

Lokianswer は、Hibernate 3のドキュメントを指し、良い情報を提供しますが、期待した結果が得られませんでした。

多くのスラッシング、腕の振り、一般的なネズミの死骸がついに私のチーズに着きました。

Hibernate 3は Simple Logging Facade for Java (SLF4J)(ドキュメントごと)を使用しているため、ifLog4jに依存しています1.2alsoslf4j-log4j12-1.5.10.jarlog4j構成ファイルを使用してHibernateロギングを構成する完全にしたい場合これが次の人に役立つことを願っています。

25
Dennis S

Homaxtoのコメントに応えて、これは私が今持っているものです。

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

重要な部分は

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

お役に立てれば。

7
James McMahon

私が使用するものは次のとおりです。

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

明らかに、私はHibernateメッセージを見るのが好きではありません;)-出力を取得するためにレベルを "debug"に設定します。

5
TMN

答えは役に立ちました。変更後、SQLステートメントのログが重複して記録されました。1つはlog4jログファイルに、もう1つは標準コンソールに記録されました。 persistence.xmlファイルを変更してshow_sqlをfalseに変更し、標準コンソールからログを削除しました。 format_sqlをtrueに保持すると、log4jログファイルにも影響するため、それを維持しました。

<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

log4jファイルは、次のようなカテゴリタグで構成できます(例のコンソールアペンダーを使用)。

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

そのため、休止状態からのすべての警告、エラー、または致命的なメッセージが表示されます。また、コードとライブラリコードは情報レベルになります(つまり、info、warn、error、fatal)

ライブラリのログレベルを変更するには、たとえば、非アクティブなスプリング情報ログにカテゴリを追加するだけです。

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

または、別のアペンダーを使用して、加法性を破ります(加法性のデフォルト値はtrueです)

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

また、すべてのクエリを休止状態に記録したくない場合は、休止状態プロパティshow_sqlfalseに設定します。

0
Emilien Brigand