On 12/09/2013 08:02 AM, Shi Jun Zhang wrote:
Peter,
I think you are misunderstanding this problem. This deadlock is not
related to the formatter synchronization, we can make
CustomerFormatter.format not synchronized and not call super.format,
the deadlock still happens.
I'm not saying that your formatters are explicitly synchronized - all
formatters are currently effectively synchronized by LogHandlers. The
Formatter is invoked from within LogHandler's publish() method which is
synchronized (on LogHandler.this). If formatters were invoked out of
this synchronized section, there would be no danger of deadlocks when
using Logger.log from within custom formatters. But then other issues
would arise as a consequence of non-multithreaded formatters being
invoked concurrently...
Regards, Peter