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