You will get better performance by not logging at all, no question.  However, there are tuning possibilities.  I see you mention "logger.info()".  In production, I generally only have "warn()" and above for the vast majority of loggers.  In fact, I configure the root logger up with the "WARN" level and selectively set other loggers to something less than WARN (if need be).

The other thing you might look at is whether you are concatenating strings in your logging statements.  For instance the following will incur an unnecessary cost in concatenating strings even when the "DEBUG" level is not enabled....

logger.debug("product: " + someProduct + ", price: " + somePrice);

A more efficient way to define this in your code is....

if (logger.isDebugEnabled()) {
    logger.debug("product: " + someProduct + ", price: " + somePrice);
}

In this case, you will only incur the cost of a simple boolean check when "DEBUG" is disabled.

Note that this is unnecessary if you are not concatenating, as isDebugEnabled() is called internally to the debug() method prior to sending your message to the appender anway.  Avoiding concatenation altogether in your logging statements is generally recommended, but really doesn't hurt much if you are only doing it for trace(), debug(), or info() statements that are surrounded by is[Level]Enabled() and you only have "WARN" and above enabled in production.

So, when you are profiling, you must take into account how your loggers perform logging in the code as well as the configuration you are using.  Simply saying that logging is super costly without taking these issues into account is not useful.  Feel free to post more specifics, especially if you feel you truly are taking these issues into account and are still getting ridiculously bad performance while using Log4j.


Jake

On Mon, 13 Dec 2010 09:54:04 +0800
 <betterjo...@hotmail.com> wrote:
I need your help!!!
Please help me ,thanks.


2010-12-13





  2010-12-11 01:52:03 Log4J Users List Re: Re: performance problem in multithread environment
hi,
through jprofiler I found that many thread are blocked at logger.info(message).I saw that each logger.info() call will cost 2,200 us,the application are running at a machine which has one phyical cpu(64 virtual cpu),1.5Ghz,32G memory,solaris 10. If I comment all logger message(means no logging message),the application performance will be faster more than ten times. If I crate new logger instance for each log message,the application performance will be faster more than four times.
Could tell me the difference between category and logger.
Api shows that logger extends category,logger.info() just is category.info()。 The code show that synchronization is by category,but code category = this,shows that at this time category just is logger.
BTW:
In my application,when process one order,it will log about 700 messages.
With log,application will process three orders one second,But without log,application will process 40 orders one second.
Is there any mistakes by using log4j?need more config?
thanks. 2010-12-11 Sebastien Tardif 2010-12-11 01:10:40 log4j-user Re: performance problem in multithread environment
The code show that synchronization is by category.
If appendLoopOnAppenders is faster, like if the underline code use
asynchronous appender, that should not be a problem.
So you should investigate what the thread having the lock is doing.
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to