Spring缓存:@Cacheable命中时的日志记录

48

目前我正在使用Spring Cache和@Cacheable/@CacheEvict注解。

我希望能够得到一些类似于"INFO: 我从缓存中获取这些值,而不是从主机上获取。太棒了"的控制台日志。

是否有一种简洁易行的方法来实现这个?我们似乎在使用slf4j,如果这有任何意义的话。

5个回答

67

对于Spring Boot 2,您可以在application.properties文件中添加以下内容:

logging.level.org.springframework.cache=TRACE

59

Spring本身在trace级别下记录了一些缓存抽象行为,这些记录可在org.springframework.cache记录器下找到。因此,如果您将记录附加到适当的appender下的org.springframework.cache记录器中,您将获得有关控制台等信息的一些有用信息。 如果您正在使用Logback,则可以在logback.xml中使用以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework.cache" level="trace">
        <appender-ref ref="STDOUT" />
    </logger>
</configuration>

使用此配置,您应该在控制台上看到以下内容:

在缓存中找到键为“Page request [number: 0, size 20, sort: null]”的缓存条目,缓存名称为“persons”


1
这帮助我在我们项目设置中找到了类似的配置。谢谢 :) - BassSultan

2

您可以启用跟踪级别日志记录。

例如,在application.properties中放置'trace=true'。

Spring日志记录文档


2
如果你使用application.yml和Spring Boot 2。
logging:
  level:
    org.springframework.cache: TRACE

不要设置 DEBUG 级别,它仅适用于 TRACE。

对于 application.properties 文件。

logging.level.org.springframework.cache=TRACE

1
我认为一直开启跟踪日志并不是一个好主意,即使只是为了缓存日志。
更好的方法是,EHcache已经有了命中/未命中指标,您可以通过JMXspring boot actuator获取它。
要使用JMX,请参阅this
要使用Spring Boot Actuator,请参阅this

绝对同意,除非它在本地开发人员的机器上完成。然而,这是非常好的和有价值的提示,如何记录和监视缓存行为。 - Radouxca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接