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.

Sylvain

--
Sylvain Wallez Anyware Technologies
http://www.apache.org/~sylvain http://www.anyware-tech.com
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }

Reply via email to