web-dev-qa-db-ja.com

Ehcacheのロギングを有効にする方法

Spring + Hibernateプロジェクトでは、LogBackを使用してSLF4J1.6.4によるロギングを行っていました。ここで、Ehcache 2.2.0を追加しました(ehcache-spring-annotations-1.1.3を介して)。キャッシュはメソッドとして機能しているようで、@ Cacheableアノテーションが付けられており、正しい結果を返しますが、実行されなくなりました。しかし、Ehcacheによって書き込まれたログを確認することに興味があります。 EhcacheもSLF4Jを使用しているので、ログをログファイルに書き込む必要があると思います。しかし、これは起こっていません。 logback.xmlには次のものがあります。

 <root level="info">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="ROLLING"/>
</root>

以下を追加しても役に立ちません

 <logger name="net.sf.ehcache"> 
</logger> 

Ehcache.xml

    <cache name="sampleCache1"
       eternal="false"
       overflowToDisk="true"
       timeToIdleSeconds="300"
       timeToLiveSeconds="600"           
       memoryStoreEvictionPolicy="LFU"           
        />

問題を克服するように私にアドバイスしてください。

EhcacheはSLF4J1.6.1を使用していますが、私のプロジェクトはSLF4J1.6.4を使用していました。問題はありますか?

ありがとう

12
Tamim

EhCacheはDEBUGレベルで多くのログを記録します。まず、この構成スニペットは、INFOの下のすべてのロギングステートメントを除外します。

<root level="info">

に変更します

<root level="ALL">

第二に

<logger name="net.sf.ehcache">

ロギングレベルを上げる必要があります

<logger name="net.sf.ehcache" level="ALL"/> 

その後、EhCache(およびその他)からのログステートメントがたくさん表示されます。

52

私の意見では、ルートロガーレベルをALLに設定することは良い考えではありません。

これは、すべてのレベルのALLログメッセージが通過することを意味します(アペンダーにしきい値を設定しない限り)。

代わりに、INFOWARNなどの適切なルートロガーレベルを設定してから、より具体的な情報が必要な場合は個々のロガーのログレベルを設定することをお勧めします。

このようにして、不要な情報のフォレストを作成することはありません。

私は以下のようなものを提案します:

<appender name="CONSOLE" class="org.Apache.log4j.ConsoleAppender"> 
  <param name="Target" value="System.out"/> 
  <layout class="org.Apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
  </layout>  
</appender> 

<logger name="net.sf.ehcache">
  <level value="DEBUG"/>
</logger>

<root> 
  <priority value ="INFO" /> 
  <appender-ref ref="CONSOLE" /> 
</root>
10
Nabil_H

また、Spring Framework 4.2.1のキャッシュ機能(@Cacheableなど)を使用しているため、org.springframework.cacheでDEBUGログを有効にすると便利です。

5
ben3000

次のようにCacheEventListenerインターフェースを実装して、Ehcache3のカスタムロガーを作成しました

public class CacheLogger implements CacheEventListener<Object, Object> {

    private static final Logger LOG = LoggerFactory.getLogger(CacheLogger.class);

    @Override
    public void onEvent(CacheEvent<?, ?> cacheEvent) {
        LOG.info("YOUR LOG IS HERE");
    }
}

Ehcache.xmlはリスナークラスを定義します

<cache-template name="default">
        <expiry>
            <ttl unit="seconds">300</ttl>
        </expiry>
        <listeners>
            <listener>
                <class>com.path.to.CacheLogger</class>
                <event-firing-mode>ASYNCHRONOUS</event-firing-mode>
                <event-ordering-mode>UNORDERED</event-ordering-mode>
                <events-to-fire-on>CREATED</events-to-fire-on>
                <events-to-fire-on>EXPIRED</events-to-fire-on>
                <events-to-fire-on>EVICTED</events-to-fire-on>
            </listener>
        </listeners>
        <resources>
            <heap>1000</heap>
            <offheap unit="MB">10</offheap>
        </resources>
    </cache-template>
0
Hany Sakr