Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to enable logging of Ehcache

In my Spring + Hibernate project, I was doing logging by SLF4J 1.6.4 with LogBack. Now, I've added Ehcache 2.2.0 (through ehcache-spring-annotations-1.1.3). The caching seems to be working as the method, annotated with @Cacheable, no longer being executed, though returning the correct result. But, I'm interested to see the log written by the Ehcache. As Ehcache also uses SLF4J, I supposed, the log should be written into my log file. But, this is not happening. The logback.xml has the following.

 <root level="info">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="ROLLING"/>
</root>

Adding following also doesn't help

 <logger name="net.sf.ehcache"> 
</logger> 

Ehcache.xml

    <cache name="sampleCache1"
       eternal="false"
       overflowToDisk="true"
       timeToIdleSeconds="300"
       timeToLiveSeconds="600"           
       memoryStoreEvictionPolicy="LFU"           
        />

Please advise me to overcome the problem.

The Ehcache is using SLF4J 1.6.1, while my project was using SLF4J 1.6.4. Can it cause any problem?

Thanks

like image 708
Tamim Avatar asked May 22 '12 15:05

Tamim


3 Answers

EhCache logs a lot on DEBUG level. First of all, this configuration snippet filters out all logging statements below INFO:

<root level="info">

Change it to

<root level="ALL">

Secondly

<logger name="net.sf.ehcache">

needs an increased logging level

<logger name="net.sf.ehcache" level="ALL"/> 

You should then see plenty of logging statements from EhCache (and others).

like image 143
Tomasz Nurkiewicz Avatar answered Oct 04 '22 05:10

Tomasz Nurkiewicz


In my opinion setting the root logger level to ALL is not a good idea.

This means that ALL log messages of every level will get through (unless you set a threshold on your appenders).

Instead, I suggest you set a sensible root logger level, such as INFO or WARN, and then set the log level of individual loggers if you require more specific information.

This way you are not creating a forest of unnecessary information.

I suggest something like the below:

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

like image 40
Nabil_H Avatar answered Oct 04 '22 03:10

Nabil_H


I also found it handy to enable DEBUG logging on org.springframework.cache because I'm using Spring Framework 4.2.1's caching feature (@Cacheable etc.).

like image 5
ben3000 Avatar answered Oct 04 '22 04:10

ben3000