Google

Log4j Version 1.2.7: Class Logging
Log4j 1.2.7

org.apache.log4j.performance
Class Logging


java.lang.Object

  |

  +--org.apache.log4j.performance.Logging


public class Logging
extends Object

Measure the performance of logging.

Experimental results are listed below in units of micro-seconds. Measurements were done on a AMD Duron clocked at 800Mhz running Windows 2000 and Sun's 1.3 JDK.

Layout NullAppender FileAppender FileAppender (no flush) AsyncAppender (no flush)
SimpleLayout 4 21 16 33
PatternLayout "%p - %m%n" 4 21 16 32
PatternLayout "%-5p - %m%n" 4 NA NA NA
TTCCLayout/RELATIVE 10 37 31 45
PatternLayout "%r [%t] %-5p %c{2} %x - %m%n" 11 NA NA NA
PatternLayout "%r [%t] %-5p %.10c %x - %m%n" 11 NA NA NA
PatternLayout "%r [%t] %-5p %.20c %x - %m%n" 11 NA NA NA
PatternLayout "%r [%t] %-5p %c - %m%n" 9 36 29 45
TTCCLayout/ISO8601 25 58 51 71
PatternLayout "%d{ISO8601} [%t] %-5p %c %x - %m%n" 28 62 55 76
PatternLayout "%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n" 46 82 72 94
PatternLayout "%l - %m%n" 241 317 299 251
PatternLayout "%C.%M.%L - %m%n" 267 NA NA NA

The results of the measurements (should) show that:

  1. The PatternLayout perforance is very close to the performance of a dedicated layout of equivalent format.

  2. Format specifiers in conversion patterns have almost no impact on performance.

  3. Formating time and date information is costly. Using relative time has the least impact on performance. It is recommended that to use log4j specific date formatters such as the ISO8601DateFormat instead of the standard SimpleDateFormat because of its poor performance. See the %d conversion character in PatternLayout.

  4. Avoiding the flush operation at the end of each append results in a performance gain of 10 to 20 percent. However, there is safety tradeoff invloved in skipping flushing. Indeed, when flushing is skipped, then it is likely that the last few log events will not be recorded on disk when the application exits. This is a high price to pay even for a 20% performance gain.

  5. The AsyncAppender does not automatically increase performance. On the contrary, it significantly degrades performance. The performance tests done here very quickly fill up the bounded buffer of the AsyncAppender and there is cosiderable overhead in managing this bounded buffer.

    On the other hand, had we interleaved logging operations with long blocking and non CPU-intensive operations, such as I/O, network access, sleeping threads, then the AsyncAppender would have tremendously reduced the cost of logging in terms of overall application runtime.

    In a variant of this test, we have inserted a short sleep operation between every 10 log operations. When the total slept time is substracted, logging with the AsyncLogger takes no time at all. In other words, logging is done for "free".

  6. Extracting location information is comparatively slow. It implies at least a ten fold increase in logging time! It should be avoided unless performace is not a concern. It has been reported from a trusted source that logging with location information on AIX machines will kill your application's performance.

Author:
Ceki Gülcü

Constructor Summary
Logging()
           
 
Method Summary
static void main(String[] argv)
          Usage: java org.apache.log4j.performance.Logging confFile runLength [delay] [burstLen] confFile is an XML configuration file and runLength (integer) is the length of test loop, delay is the time in millisecs to sleep every bustLen log requests.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Logging


public Logging()
Method Detail

main


public static void main(String[] argv)
Usage: java org.apache.log4j.performance.Logging confFile runLength [delay] [burstLen]

confFile is an XML configuration file and runLength (integer) is the length of test loop, delay is the time in millisecs to sleep every bustLen log requests.

This application just prints the average time it took to log.


Log4j 1.2.7

Copyright 2000-2002 Apache Software Foundation.