[ 
http://jira.qos.ch/browse/LBCORE-248?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Svetla Arnaudova updated LBCORE-248:
------------------------------------

    Attachment: lbClassicStatus.jpg
                logback.xml
                logback-conf.xml.xml

> Logback Context  is not thread safe, throws 
> java.util.ConcurrentModificationException
> -------------------------------------------------------------------------------------
>
>                 Key: LBCORE-248
>                 URL: http://jira.qos.ch/browse/LBCORE-248
>             Project: logback-core
>          Issue Type: Bug
>    Affects Versions: 1.0.0
>         Environment: Windows 7 OS,  Java 1.6 build 1.6.0_27-b07, Tomcat 7
>            Reporter: Svetla Arnaudova
>            Assignee: Logback dev list
>         Attachments: lbClassicStatus.jpg, logback-conf.xml.xml, logback.xml
>
>
> We see the following exception in Status messages for LoggerContext (see 
> attached pic lbClassicStatus.jpg)
> java.util.ConcurrentModificationException
>         at java.util.Hashtable$Enumerator.next(Hashtable.java:1031)
>         at 
> ch.qos.logback.classic.LoggerContext.syncRemoteView(LoggerContext.java:93)
>         at 
> ch.qos.logback.classic.LoggerContext.putProperty(LoggerContext.java:101)
>         at 
> ch.qos.logback.core.util.ContextUtil.addHostNameAsProperty(ContextUtil.java:42)
>         at 
> ch.qos.logback.classic.joran.action.ConfigurationAction.begin(ConfigurationAction.java:48)
>         at 
> ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:276)
>         at 
> ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:148)
>         at 
> ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:130)
>         at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50)
>         at 
> ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:147)
>         at 
> ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:133)
>         at 
> ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:96)
>         at 
> ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:55)
>         at 
> ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
>         at 
> com.excilys.ebi.utils.spring.log.logback.LogbackConfigurer.initLogging(LogbackConfigurer.java:90)
>         at 
> com.excilys.ebi.utils.spring.log.logback.web.LogbackWebConfigurer.initLogging(LogbackWebConfigurer.java:92)
>         at 
> com.excilys.ebi.utils.spring.log.logback.web.LogbackConfigListener.contextInitialized(LogbackConfigListener.java:43)
>         at 
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
>         at 
> org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
>         at 
> org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
>         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
> Our web application set default configuration logback.xml file in the class 
> path so that logback will use it to configure itself during initialization. 
> It is slightly different (only set info level) from the default basic 
> configuration, used in case there is no such file (see attached logback.xml).
> The real logback.xml configuration file is outside of the web application 
> (attached as logback-conf.xml) and we reconfigure logapp to use it with 
> spring integration lib 
> https://github.com/excilys/spring-log
> Not sure that the rest of the description will be helpful to troubleshoot the 
> problem, but this is how we reproduce it:
> This is the example code:
>   <context-param>
>     <param-name>logbackConfigLocation</param-name>
>     <param-value>file:${basedir}/conf/logback.xml</param-value>
>   </context-param>
>   <listener>
>     
> <listener-class>com.excilys.ebi.utils.spring.log.logback.web.LogbackConfigListener</listener-class>
>   </listener>
> After spring is loaded LogbackConfigListener class will initialize logback 
> from the given location and reset the logger context. 
> Code snip from LogbackConfigListener  init logging below: 
> public static void initLogging(String location) throws FileNotFoundException, 
> JoranException {
> String resolvedLocation = SystemPropertyUtils.resolvePlaceholders(location);
> URL url = ResourceUtils.getURL(resolvedLocation);
> ContextSelector selector = 
> ContextSelectorStaticBinder.getSingleton().getContextSelector();
> LoggerContext loggerContext = selector.getLoggerContext();
> // in the current version logback automatically configures at startup
> // the context, so we have to reset it
> loggerContext.reset();
> ContextInitializer contextInitializer = new ContextInitializer(loggerContext);
> contextInitializer.configureByResource(url);
> // reset JUL
> // don't forget to configure the LevelChangePropagator contextListener
> // in the config file!!!
> SLF4JBridgeHandler.install();
> }
> We sometimes receive concurrency modification exception from the logback core 
> code.  We never observe this issue if we remove default logback file from the 
> class path as initial configuration.
> To prevent this exception we also delay logback configuration loading.
> Thank you,
> Svetla

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        
_______________________________________________
logback-dev mailing list
[email protected]
http://mailman.qos.ch/mailman/listinfo/logback-dev

Reply via email to