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を使用していました。問題はありますか?
ありがとう
EhCacheはDEBUG
レベルで多くのログを記録します。まず、この構成スニペットは、INFO
の下のすべてのロギングステートメントを除外します。
<root level="info">
に変更します
<root level="ALL">
第二に
<logger name="net.sf.ehcache">
ロギングレベルを上げる必要があります
<logger name="net.sf.ehcache" level="ALL"/>
その後、EhCache(およびその他)からのログステートメントがたくさん表示されます。
私の意見では、ルートロガーレベルをALL
に設定することは良い考えではありません。
これは、すべてのレベルのALL
ログメッセージが通過することを意味します(アペンダーにしきい値を設定しない限り)。
代わりに、INFO
やWARN
などの適切なルートロガーレベルを設定してから、より具体的な情報が必要な場合は個々のロガーのログレベルを設定することをお勧めします。
このようにして、不要な情報のフォレストを作成することはありません。
私は以下のようなものを提案します:
<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>
また、Spring Framework 4.2.1のキャッシュ機能(@Cacheableなど)を使用しているため、org.springframework.cache
でDEBUGログを有効にすると便利です。
次のように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>