Spring 如何启用Ehcache的日志记录

Spring 如何启用Ehcache的日志记录,spring,ehcache,slf4j,logback,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,我想应该将日志写入我的日志文件中。但是,这并没有发生。xml具有以下特性 <root level="info"&

在我的Spring+Hibernate项目中,我使用带有LogBack的SLF4J 1.6.4进行日志记录。现在,我添加了Ehcache 2.2.0(通过Ehcache-spring-annotations-1.1.3)。虽然返回正确的结果,但缓存似乎像方法一样工作,用@Cacheable注释,不再执行。但是,我想看看Ehcache写的日志。由于Ehcache也使用SLF4J,我想应该将日志写入我的日志文件中。但是,这并没有发生。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。它会引起什么问题吗


谢谢

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

<root level="info">

换成

<root level="ALL">

其次

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

需要增加日志记录级别

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


然后,您应该会看到来自EhCache(和其他)的大量日志记录语句。

我还发现在
org.springframework.cache
上启用调试日志记录非常方便,因为我使用的是Spring Framework 4.2.1的缓存特性(@Cacheable等)。

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

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

相反,我建议您设置一个合理的根日志记录器级别,例如
INFO
WARN
,然后如果需要更具体的信息,请设置各个日志记录器的日志级别

这样,您就不会创建一个包含不必要信息的森林

我建议如下:



通过实现CacheEventListener接口,我为Ehcache 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");
    }
}
公共类CacheLogger实现CacheEventListener{
私有静态最终记录器LOG=LoggerFactory.getLogger(CacheLogger.class);
@凌驾
public void onEvent(CacheEvent CacheEvent){
LOG.info(“您的日志在这里”);
}
}
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>

300
com.path.to.CacheLogger
异步的
无序
创建
期满
驱逐
1000
10

我刚刚发现ehcache并没有记录我所期望的一切。那么,你有没有看过ehcache,它是否真的记录了你期望的东西?这是否意味着要在application.properties中添加这一行:“logging.level.org.springframework.cache:DEBUG”是的,可以,但确实有。有人能看一下我发布的任务吗:参考
<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>