SPECIFICALLY: As Ceki mentioned you currently have logging statements being output to both files... this will hurt performance in this test. Simply setting additivity to false for the two loggers should work wonders for this simple test. Try this for your config:
############################################################################ ### # Define root logger/category ############################################################################ ### log4j.rootCategory=DEBUG,dest1 ############################################################################ ### # Define non-root loggers/categories ############################################################################ ### log4j.category.ut.log.Log4jPerfTest=DEBUG,dest2 log4j.additivity.ut.log.Log4jPerfTest=false ############################################################################ ### # Define appenders ############################################################################ ### log4j.appender.dest1=org.apache.log4j.RollingFileAppender log4j.appender.dest1.layout=org.apache.log4j.SimpleLayout log4j.appender.dest1.File=c:/skk/cps/logger/test/test1.log log4j.appender.dest1.MaxFileSize=4MB log4j.appender.dest1.MaxBackupIndex=60 log4j.appender.dest2=org.apache.log4j.RollingFileAppender log4j.appender.dest2.layout=org.apache.log4j.TTCCLayout log4j.appender.dest2.File=c:/skk/cps/logger/test/test.log log4j.appender.dest2.MaxFileSize=4MB log4j.appender.dest2.MaxBackupIndex=60 GENERALLY: The way to mimic your setup in log4j would be to use AsyncAppender as your attached appender. This will create a background thread to handle appending the actual logging events. AsyncAppender can only be created from config files using the XML config. Or you can do it programatically for your tests. See http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/AsyncAppender.html for its description. Also, be aware that the async logging in log4j does still strive to maintain delivery of generated LoggingEvents to its attached appenders in the chronological order in which those events were created. To this end, it uses a bounded buffer as the "queue" for these events. This slows performance in simple, non-intensive apps; however it does ensure delivery of the logging events in the correct order. For a discussion of this see the section on AsyncAppender at http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/performance/Loggin g.html HTH |-----Original Message----- |From: sk k [mailto:[EMAIL PROTECTED]] |Sent: Tuesday, September 03, 2002 9:37 PM |To: Log4J Users List |Subject: Re: Performance between Log4j and custom in-house logger | | | |Hi, | |Any thoughts on how I can improve the performance |numbers for logging. | | |Thanks. | | |--- Ceki Gülcü <[EMAIL PROTECTED]> wrote: |> |> What is the difference between Strings, taking the |> values 2,4 and 8, |> and Request, taking the values 100, 1000 and 2000? |> |> Are you sure you are waiting for the background |> thread to finish? |> |> Your log4j configuration file suggests that your |> tests use two |> appenders dest1 and dest2. You are aware that |> appenders are additive, |> right? Does logging output go both |> c:/skk/cps/logger/test/test1.log |> and c:/skk/cps/logger/test/test.log? Given that |> writing to a file is |> the most time consuming task, is it fait to say that |> log4j is doing |> twice the work roughly at the same cost? |> |> At 07:29 03.09.2002 -0700, you wrote: |> >Hi, |> > |> >We are planning to move from a custom in house |> logging |> >framework (MyLogger) to using Log4j and have been |> >doing some performance comparison between log4j and |> >MyLogger. |> > |> >The numbers seem to be favoring mylogger over |> log4j. |> > |> > |> >Sample Numbers |> >============== |> >Note: Timing includes logj startup time, mylogger |> >startup time and junitperf startup time. |> > |> >1) Logging 2 strings, each of size: 128bytes |> > |> >Request MyLogger(sec) Log4j(sec) |> >====== ======= ========= |> >100 1.22 1.29 |> >1000 1.67 1.71 |> >2000 2.12 2.01 |> > |> > |> > |> >2) Logging 4 strings, each of size: 128bytes |> > |> >Request MyLogger(sec) Log4j(sec) |> >====== ======= ========= |> >100 1.21 1.25 |> >1000 1.653 1.82 |> >2000 2.24 2.56 |> > |> > |> >3) Logging 8 strings, each of size: 128bytes |> > |> >Request MyLogger(sec) Log4j(sec) |> >====== ======= ========= |> >100 1.35 1.35 |> >400 1.56 1.71 |> >900 1.8 2.35 |> > |> >4) Logging 80 strings, each of size: 128bytes |> > |> >Request MyLogger(sec) Log4j(sec) |> >====== ======= ========= |> >100 1.251 1.7 |> >1000 1.81 6.1 |> >2000 2.15 11.2 |> > |> > |> >Sample code and configuration |> >=========================== |> >log4j.properties |> >============== |> >log4j.rootCategory=DEBUG,dest1 |> > |> |>log4j.appender.dest1=org.apache.log4j.RollingFileAppender |> |>log4j.appender.dest1.layout=org.apache.log4j.SimpleLayout |> |>log4j.appender.dest1.File=c:/skk/cps/logger/test/test1.log |> >log4j.appender.dest1.MaxFileSize=4MB |> >log4j.appender.dest1.MaxBackupIndex=60 |> > |> > |> >log4j.category.ut.log.Log4jPerfTest=DEBUG,dest2 |> >log4j.additivity.Log4jPerfTest=false |> |>log4j.appender.dest2=org.apache.log4j.RollingFileAppender |> |>log4j.appender.dest1.layout=org.apache.log4j.TTCCLayout |> > |> |>log4j.appender.dest2.File=c:/skk/cps/logger/test/test.log |> >log4j.appender.dest2.MaxFileSize=4MB |> >log4j.appender.dest2.MaxBackupIndex=60 |> > |> >Test Logger code |> >=============== |> > |> >Note: logMsgs is an array with strings of size 128 |> >bytes. |> > |> > public void test_Log4j() throws Exception { |> > |> > int size = logMsgs.size(); |> > |> > for( int i=0; i<size; i++ ) { |> > log4jLogger.info( |> (String)logMsgs.get(i) |> >); |> > } |> > |> > } |> > |> >Some of my questions |> > |> >1) Is there anything that I can do to increase the |> >performance of log4j on my box( Pentium-3, 800Mhz, |> >512MB RAM) |> > |> >2) I see some architectural difference between the |> way |> >mylogger and log4j is implemented namely |> > My logger does formatting&writing to log file in |> a |> >background thread whereas it seems that log4j |> doesn't |> > seem do the same. Is this true. |> > My logger uses the concept of observer and |> >observable. |> > |> > |> >Thanks. |> > |> >__________________________________________________ |> >Do You Yahoo!? |> >Yahoo! Finance - Get real-time stock quotes |> >http://finance.yahoo.com |> > |> >-- |> >To unsubscribe, e-mail: |> <mailto:[EMAIL PROTECTED]> |> >For additional commands, e-mail: |> <mailto:[EMAIL PROTECTED]> |> |> -- |> Ceki |> |> TCP implementations will follow a general principle |> of robustness: be |> conservative in what you do, be liberal in what you |> accept from |> others. -- Jon Postel, RFC 793 |> |> |> |> -- |> To unsubscribe, e-mail: |> <mailto:[EMAIL PROTECTED]> |> For additional commands, e-mail: |> <mailto:[EMAIL PROTECTED]> |> | | |__________________________________________________ |Do You Yahoo!? |Yahoo! Finance - Get real-time stock quotes |http://finance.yahoo.com | |-- |To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>