89

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 ファイルでこれを行う方法を知りたいと思っていました。

4

6 に答える 6

164

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>

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

于 2009-01-12T19:32:28.270 に答える
26

Loki回答は Hibernate 3 のドキュメントを指しており、適切な情報を提供していますが、期待した結果は得られませんでした。

多くのスラッシング、腕の振り、一般的な死んだネズミの走りが、ついに私のチーズを上陸させました。

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

于 2010-02-25T17:06:58.770 に答える
5

これが私が使用するものです:

<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 メッセージを見るのは好きではありません ;) -- レベルを「デバッグ」に設定して、出力を取得します。

于 2009-03-12T16:19:58.977 に答える
3

答えは役に立ちました。変更後、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>
于 2012-07-25T18:58:31.153 に答える
0

次のようにカテゴリタグを使用してファイルを構成できます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 レベルになります (つまり、info、warn、error、fatal)

ライブラリのログ レベルを変更するには、カテゴリを追加するだけです。たとえば、Spring Info ログを非アクティブにします。

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

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

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

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

于 2013-10-08T14:07:44.513 に答える