如何启用Ehcache的日志记录

时间:2012-05-22 15:25:27

标签: spring ehcache slf4j logback

在我的Spring + Hibernate项目中,我使用LogBack通过SLF4J 1.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正在使用SLF4J 1.6.1,而我的项目正在使用SLF4J 1.6.4。它会引起任何问题吗?

由于

4 个答案:

答案 0 :(得分:50)

EhCache在DEBUG级别上记录了很多。首先,此配置代码段会过滤掉INFO下面的所有日志记录语句:

<root level="info">

将其更改为

<root level="ALL">

其次

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

需要提高日志记录级别

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

然后,您应该看到EhCache(和其他人)的大量日志记录声明。

答案 1 :(得分:9)

在我看来,将根记录器级别设置为ALL并不是一个好主意。

这意味着每个级别的ALL日志消息都将通过(除非您在appender上设置了阈值)。

相反,我建议您设置合理的根记录器级别,例如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>

答案 2 :(得分:5)

我还发现在org.springframework.cache上启用DEBUG登录非常方便,因为我使用的是Spring Framework 4.2.1的缓存功能(@Cacheable等)。

答案 3 :(得分:1)

我通过实现CacheEventListener接口,为E​​hcache 3编写了一个自定义记录器

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>