Details
-
Bug
-
Resolution: Fixed
-
Critical
-
1.0.4
-
None
-
Linux 64bit - Debian Squeeze
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)tomcat6
Description
During a clean tomcat startup (tomcat was stopped before) and initialization of logback we observed that an AsyncAppender may come up without worker thread resulting in a deadlock of the application, because the queue will never be emptied.
We use a lot of AsyncAppenders in our setup, and this Error seldomly happens, so this might be hard to trigger. I suspect a Race condition somewhere?
Here is some logback output with debug turned on:
You see the Worker Thread dies immediately after initialization and nonetheless the initializian continues and the Appender gets added to the ROOT logger.
12:07:07,295 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.AsyncAppender]
12:07:07,295 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [XXX-log-error]
12:07:07,295 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [XXX-sync-log-error] to ch.qos.logback.classic.AsyncAppender[XXX-log-error]
12:07:07,295 |-INFO in ch.qos.logback.classic.AsyncAppender[XXX-log-error] - Attaching appender named [XXX-sync-log-error] to AsyncAppender.
12:07:07,295 |-INFO in ch.qos.logback.classic.AsyncAppender[XXX-log-error] - Setting discardingThreshold to 51
12:07:07,296 |-INFO in ch.qos.logback.classic.AsyncAppender[XXX-log-error] - Worker thread will flush remaining events before exiting.
...
a lot of successfull appender initialization cut out
...
12:07:07,338 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [XXX-log-error] to Logger[ROOT]