Search code examples
javaspringslf4jspring-cache

Spring cache logging on @Cacheable hit


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.


Solution

  • 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'