At 10:42 AM 10/29/2003 -0800, David McVicar wrote:
Toby, Yoav,

Thanks for the responses.

Yoav:

Thanks for explaining the Hierarchy.setThreshold()
method - if I was to change the config to effectively
set this would I get a performance gain?  I would
prefer not to have to call this method in Java and
would like to do this via configuration.

You can set the hierarchy-wide threshold as follows:


log4j.threshold=someLevel

where someLevel can be any of ALL, DEBUG, INFO, ..., OFF.

Set to it to INFO and see the impact on performance.
(My guess would be a 3 to 4 fold improvement.)

Toby:

You are right, I shouldn't have been mixing properties
files with xml files, it wasn't a fair comparison.  I
have changed to using both properties files.

I have also updated the code to explicitly display the
time taken to execute just the Log4J and JDK 1.4 code
using direct calls to Date().getTime().  Strictly
speaking this was not necessary as I was reusing the
JUnitPerf classes from Mike Clark (www.clarkware.com).
 JUnitPerf is an Open Source add on to JUnit that
allows you to measure the performance of JUnit tests,
as I was initialising the Logger in the constructor of
the JUnit TestCase class and not in the method that
JUnitPerf was timing the differences between
properties and xml config files shouldn't have made a
difference.  Anyway for clarity its changed now and
you can run each test directly.

I also take your point that "benchmarking by
iteration" is not the best way to measure the overall
performance of Log4J however the specific test that I
am performing here is to understand the difference in
duration between leaving JDK 1.4 and Log4J logging
code in place and configuring it not to log any
messages.  As I said before the only reason that I am
iterating 10 million times is to get a significantly
measurable result as to perform the division and
calculate the cost of leaving a single logging
statement that is configured not to log.

Unfortunately the changes didn't make any difference
to the results, this time for 10 million iterations it
was:

JDK 1.4 : 441 ms
Log4J   : 901 ms

I think that this illustrates that for a comparable
test where the general configuration of both JDK 1.4
and Log4J is to log messages BUT a specific class has
been configured NOT to log that JDK 1.4 is faster.  If
Log4J was enhanced to check earlier comparable
performance results could be acheived.

Two short comments:


1) Spending under 1 second for 10 million trials is not bad. Your
tests show that in a single threaded application calling disabled log
statements is hardly an issue.

Btw, I am not saying this as a sore loser because log4j seems to be
slower on this test. With the hierarchy-wide threshold the figures
should be in log4j's favor.

2) The really interesting question is how both API perform on a loaded
server...


-- Ceki Gülcü

     For log4j documentation consider "The complete log4j manual"
     ISBN: 2970036908 http://www.qos.ch/shop/products/clm_t.jsp



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to