[ https://issues.apache.org/jira/browse/LOG4J2-1094?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14699289#comment-14699289 ]
Ralph Goers edited comment on LOG4J2-1094 at 8/17/15 10:13 AM: --------------------------------------------------------------- The problem is that it is not just at initialization. Every call to getLogger and getLoggerContext would have to be synchronized. Furthermore, this will only happen when the first logging call is made after multiple threads have been created. Frankly, I believe this is highly unusual as it is very likely there will be at least one logging call on the main thread before the threads are created. That said, I am still considering fixing this but am hoping other committers will weigh in on this. was (Author: ralph.go...@dslextreme.com): The problem is that it is not just at initialization. Every call to getLogger and getLoggerContext would have to be synchronized. Furthermore, this will only happen when the first logging call is made after multiple threads have been created. Frankly, I believe this is highly unusual as it is very likely there will be at least one logging call on the main thread before the threads are created. > Multi thread initialization problem > ----------------------------------- > > Key: LOG4J2-1094 > URL: https://issues.apache.org/jira/browse/LOG4J2-1094 > Project: Log4j 2 > Issue Type: Bug > Affects Versions: 2.3 > Reporter: Luca Burgazzoli > > I wrote a very simple example which has a behaviour I do not expect: > If I call LogManager.getLogger(..) from two threads, only one of the loggers > logs what I'd expect but if I add an additional call to > LogManager.getLogger(..) before the threads are started, I see what I'd > expect so it looks like there is a problem in multi threaded initialization. > You can fine the code and the configuration here: > - > https://github.com/lburgazzoli/lb-chronicle/blob/master/chronicle-examples/chronicle-logger-log4j2/src/main/java/com.github.lburgazzoli.openhft.examples.chronicle.logger.log4j2/MtLogging.java > - > https://github.com/lburgazzoli/lb-chronicle/blob/master/chronicle-examples/chronicle-logger-log4j2/src/main/resources/log4j2.xml > The code above will show: > {noformat} > write thread-1 > done thread-1 > write thread-2 > [TEST] [INFO ] thread-2 - message > done thread-2 > {noformat} > Any call to LogManager makes it succeed: > {code} > LogManager.getContext(false); > th1.start(); > th2.start(); > th1.join(); > th2.join(); > {code} > New output: > {noformat} > write thread-2 > write thread-1 > [TEST] [INFO ] thread-2 - message > done thread-2 > [TEST] [INFO ] thread-1 - message > done thread-1 > {noformat} > The funny thing is that the first thread to arrive is initialized with ERROR > level instead of the ALL that is given to root. In other words it seems that > the config has not loaded -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org