在我的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。它会引起任何问题吗?
由于
答案 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上设置了阈值)。
相反,我建议您设置合理的根记录器级别,例如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>
答案 2 :(得分:5)
我还发现在org.springframework.cache
上启用DEBUG登录非常方便,因为我使用的是Spring Framework 4.2.1的缓存功能(@Cacheable等)。
答案 3 :(得分:1)
我通过实现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");
}
}
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>