logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Curt Arnold <carn...@apache.org>
Subject Re: why AppenderSkeleton.doAppend is synchronized ?
Date Thu, 11 Mar 2010 05:00:03 GMT

On Mar 10, 2010, at 10:37 AM, Stefano Nichele wrote:

> Hi all,
> looking for perfomance issue in my server application, I found that AppenderSkeleton.doAppend
method is synchronized.
> I google a bit and I have found some messages but not a clear anwser to my doubt: why
that method is synchronized ? it seems that just check the threshold, the filter and that
"append" the event but in this way is serializing all log calls. I'm logging events on the
db and also using AsyncAppender + my own appender I'm not able to obtain good performance
since just one thread at time can append (insert) an event and the AsyncAppender queue grows
pretty quick.
> For sure i'm missing something...could you help me to understand the root reason for
having it synchronized ? I'm thinking to have my owm implementation of AppenderSkeleton removing
synchronization but I'm not sure if there are drawbacks that im not taking in consideration.
> Thanks a lot in advance
> ste

log4j 1.2 was designed a long time ago and relies on that big lock to provide thread safety.
 Other classes in log4j (layouts, appenders and the like) were designed assuming that they
would be externally synchronized by that lock and likely not safe if that lock is bypassed.

You could either implement the Appender interface or extend AppenderSkeleton but override
doAppend (copying and pasting the implementation but without the synchronized modifier, but
all appenders, layouts, etc used must be able to operate safely without that lock.

Addressing this issue is one of the core design goals for log4j 2.0 (http://issues.apache.org/jira/browse/LOG4J2-3)
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org

View raw message