2011-07-26 15 views
1

ログバックログライブラリを使用するようにHibernateを設定しました。そして、 "org.hibernate.SQL"と "org.hibernate.type"ロガーからロギングデータをキャッチするアペンダを作成しました。デフォルトでは、これらはINFOレベルに設定されています。JMXを介して実行時にLogbackのHibernate SQLログレベルを変更する

次のステップとして、logbackのJMXインターフェイスを使用して、これらの2つのロガーのレベルをDEBUGレベルに変更しようとします。しかし、それは動作しませんし、ログファイルにはデータが含まれていません。設定ファイルでログレベルをDEBUGに設定してからサーバーを再起動した場合にのみ動作します。

Hibernateにロギングを開始させるために何か追加する必要がありますか?ここで

はアペンダ/ロガーの設定を行く:

<configuration debug="false" scan="true" scanPeriod="5 minutes"> 

    <jmxConfigurator /> 

    ... 

    <property name="SQL_LOG_LEVEL" value="DEBUG" /> 

    <appender name="SQL_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${LOG_DIRECTORY}/sql_${weblogic.Name}.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
     <fileNamePattern>${ROTATION_DIRECTORY}/sql_${weblogic.Name}.%i.log.zip</fileNamePattern> 
     <minIndex>1</minIndex> 
     <maxIndex>5</maxIndex> 
    </rollingPolicy> 
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <maxFileSize>50MB</maxFileSize> 
    </triggeringPolicy> 
    <encoder> 
     <pattern>${LOG_PATTERN}</pattern> 
    </encoder> 
    </appender> 

    <logger name="org.hibernate.SQL" level="${SQL_LOG_LEVEL}" additivity="false"> 
     <appender-ref ref="SQL_LOG" /> 
    </logger> 

    <logger name="org.hibernate.type" level="${SQL_LOG_LEVEL}" additivity="false"> 
     <appender-ref ref="SQL_LOG" /> 
    </logger>       

    ... 

</configuration> 

はEDIT:私はいくつかのアプリケーション(EAR)同じコンテナに配備ファイルを持っています。すべてのアプリケーションが同じログ設定を使用しています。

答えて

1

問題は実際には1つのサーバーに複数のアプリケーションを展開し、基本的に各アプリケーションのクラスローダーにはログバックライブラリのコピーがあるようです。そのため、いくつかのロギングコンテキストが作成されますが、それらはすべて同じ名前(「デフォルト」)を共有するため、基本的に1つだけがMBeanサーバに登録されます。

解決策は、クラスローダー階層の上位のログバックライブラリを移動するか、logback documentationで提案されているロガーコンテキスト分離を使用することができます。

0

私は、ログレベルをTRACEに設定するまで、slw4j上のlogbackを使用してDEBUGに設定するまで、org.hibernate.SQLおよびfriendsからの出力をログに記録できませんでした。

+0

あなたは正しいです、それはorg.hibernate.SQLがDEBUGレベルに満足しているようですが、org.hibernate.typeはTRACEレベルが必要です。私の問題は少し違う。 JMX上のランタイム中のロギングレベルの変更はロガーに影響しません... –