Spring cache logging on @Cacheable hit

你说的曾经没有我的故事 提交于 2020-08-21 08:14:04

问题


Currently I am working with a Spring Cache and the @Cacheable/@CacheEvict annotations.

I would like to get some sort of a console log statement like "INFO: i got those values from the cache, NOT from the host. awesome"

Is there a clean and easy way to do this? We are using slf4j apparently btw, if that is of any interest.


回答1:


Spring itself logs some of its Caching Abstractions behaviors under the org.springframework.cache logger in trace level. So, if you append logs under the org.springframework.cache logger to an appropriate appender, you would have some useful information on, say, the console. If you're using Logback, you could use something like the following in your 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>

With this configuration, you should see something like following on your console:

Cache entry for key 'Page request [number: 0, size 20, sort: null]' found in cache 'persons'




回答2:


And for Spring Boot 2 you can add in your application.properties:

logging.level.org.springframework.cache=TRACE



回答3:


You can enable trace level logging.

Eg., in application.properties put 'trace=true'.

Spring logging documentation




回答4:


I don't think it is a good idea to open trace log all the time, even it is only for cache log.
The better way is, EHcache has this hit/miss metrics already, you can get it by JMX or spring boot actuator.

To use by JMX, you can refer this

To use Spring Boot Actuator, you can refer this.



来源:https://stackoverflow.com/questions/37281139/spring-cache-logging-on-cacheable-hit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!