cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Carsten Ziegeler" <cziege...@s-und-n.de>
Subject RE: [RT] Logging in Cocoon
Date Fri, 28 May 2004 06:55:39 GMT
Sylvain Wallez wrote:
> 
> Carsten Ziegeler wrote:
> 
> > Sylvain Wallez wrote:
> >
> >>> Ok, that's a good point. Now log4j always claims to be 
> the fastest 
> >>> logging system, so I guess this isn't an issue anymore.
> >>
> >> Well, they claimed it at that time also. Log4J has some very good 
> >> marketing ;-)
> >>
> > :) "Marketing is everything!"
> >
> > Ok, I just checked the code. It seems that logkit is doing 
> one check 
> > (testing ints) for "isDebugEnabled()" while log4j is doing two. Now 
> > this shouldn't really affect the performance I think.
> 
> 
> Look further in the code: there's actually muuuuch more code 
> behind it.
> 
> public boolean isDebugEnabled() {
>     if (repository.isDisabled(Level.DEBUG_INT)) {
>         return false;
>     }
>     return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());
> }
> 
> Yep, two tests. reposorit.isDisabled() is an interface call 
> (slower than a class call) which leads to a simple test (see 
> Hierarchy). Now let's dig deeper:
> 
> public Level getEffectiveLevel() {
>     for (Category c = this; c != null; c = c.parent) {
>         if (c.level != null) {
>             return c.level;
>         }
>     }
> }
> 
> This crawls up the category tree up to finding one that has a 
> level explicitely set! And for each call!!
> 
> This reveals what is IMO an important design flaw in Log4J: 
> logger priorities are checked a bazillion more times than 
> they are changed.
> 
> LogKit, on the other hand, takes into account the fact that 
> logger priorities are checked a bazillion more times than 
> they are changed. 
> Therefore, it propagates priority changes on child loggers, 
> meaning the crawl isn't needed and code required to check the 
> priority is really
> minimal:
> 
> public final boolean isDebugEnabled() {
>     return m_priority.isLowerOrEqual( Priority.DEBUG ); }
> 
> IMO, this makes a big difference when debug is disabled, 
> especially with deep hierarchies as we have in Cocoon (need 
> to take some of my copious free time to setup performance test cases).
> 
> I consider this as an important design flaw in Log4J, which 
> would require a good amount of work to be fixed.
> 
Ok, this is all true - but considering performance it's imho neglectable
even if you consider that heavy xml parsing and stylesheet transformations
happen at the same time.

Carsten


Mime
View raw message