geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Strachan <james_strac...@yahoo.co.uk>
Subject Re: Logging code and Garbage Collection
Date Wed, 13 Aug 2003 16:27:47 GMT
We could provide our own custom facade to log4j (i.e. a different 
commons logger facade) to do exactly what you say - use an instance 
variable to cache the result of the isXEnabled() method. This could 
then be enabled for those of us happy with a static logging levels 
until server reboot (or until deployments are redeployed etc).

Or a more ambitious option is for the Log instances to register 
(weakly) with some registry that will update the instance variables if 
the logging configuration changes. This will allow a totally dynamic 
logging configuration but remain very fast.

Either approach should speed things up a bit if that performance boost 
is required. Plus this can all be pluggable.


On Wednesday, August 13, 2003, at 05:22  pm, Berin Loritsch wrote:

> To be honest, I think we are overthinking this a bit.  Very rarely 
> does the
> logging levels change at runtime.  In fact many logging toolkits cache 
> the
> log level as a final variable to help the JIT inline and optimize out 
> the
> whole block.
>
> In every project I have worked on, the logging levels remained 
> constant from
> component init time to destruction.  The only time a logging level 
> could or
> would change is if the change was detected when the component was 
> reloaded.
> Effectively, in most cases this meant that the whole system came down 
> before
> the configuration would change.
>
> Why add more difficulty to a simple solution?
>
> The isXEnabled() methods are fast, and are usually quicker than one
> concatenation.  They do become the "bottleneck" when there is no 
> concatenation
> at all.
>
> For example:
>
> if ( m_logger.isDebugEnabled() )
> {
>     m_logger.debug( "test message" );
> }
>
> is both slower and more cumbersome than this:
>
> m_logger.debug( "test message" );
>
> However, as soon as you add in one concatenation with a variable the 
> test
> becomes valuable again:
>
> if ( m_logger.isDebugEnabled() )
> {
>     m_logger.debug( "processing the component: " + componentName );
> }
>
>
> Also note that concatenating constants is something that most 
> compilers do
> anyway so that is not an issue for runtime performance.  IOW:
>
> "test" + " " + "message" == "test message"
>
> Anything more than this is simply adding too much complexity for 
> little or no
> gain.
>
> -- 
>
> "They that give up essential liberty to obtain a little temporary 
> safety
>  deserve neither liberty nor safety."
>                 - Benjamin Franklin
>
>

James
-------
http://radio.weblogs.com/0112098/


Mime
View raw message