[jbosscache-dev] Caching log.isTraceEnabled() as instance variable

Galder Zamarreno galder.zamarreno at redhat.com
Fri Jul 11 05:21:08 EDT 2008


Ok, that sounds fair enough.

Cheers,

Manik Surtani wrote:
> 
> On 8 Jul 2008, at 18:25, Galder Zamarreno wrote:
> 
>> Hi all,
>>
>> Yesterday while looking at the JBC code, I spotted that 
>> CommandInterceptor caches log.isTraceEnabled() as instance variable 
>> and that pretty much all classes extending this use it.
>>
>> In a standalone world, where JBC runs on its own this is fine. 
>> However, when running within AS, log4j settings could change at 
>> runtime (conf/jboss-log4j.xml is hot deployable) and therefore, 
>> someone could enable TRACE logging for org.jboss.cache at runtime 
>> which wouldn't have any effect with the current JBC code.
> 
> One would think that changing the log level all the way down to TRACE 
> would not really happen on a live system so a restart would be ok.  We 
> don't do this for any other log level, just TRACE.
> 
>> As far as I can remember, it's generally recommended not to cache 
>> things like this in code running within AS. Then again, I can see how 
>> convenient caching such value is rather than calling 
>> log.isTraceEnabled() all the time. I doubt using an instance variable 
>> or calling log.isTraceEnabled() would have a real impact performance 
>> wise when TRACE is not enabled.
> 
> No, log.isTraceEnabled() can be pretty expensive.  :-)
> 
>> Thinking about this, I wonder whether any callback(s) could be 
>> implemented when the log4j settings are updated after a hot deployment 
>> and within this callback, update interceptors' trace settings...
> 
> Wouldn't that tie JBC to log4j?  I currently just use commons-logging.
> 
> 
> -- 
> Manik Surtani
> Lead, JBoss Cache
> manik at jboss.org
> 
> 
> 
> 
> 
> 

-- 
Galder Zamarreño
Sr. Software Maintenance Engineer
JBoss, a division of Red Hat



More information about the jbosscache-dev mailing list