[prev in list] [next in list] [prev in thread] [next in thread] 

List:       log4j-dev
Subject:    [jira] [Comment Edited] (LOG4J2-1094) Multi thread initialization problem
From:       "Ralph Goers (JIRA)" <jira () apache ! org>
Date:       2016-04-27 14:52:13
Message-ID: JIRA.12855877.1439478735000.47516.1461768733046 () Atlassian ! JIRA
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/LOG4J2-1094?page=com.atlassian.jira.plugin \
.system.issuetabpanels:comment-tabpanel&focusedCommentId=15260279#comment-15260279 ] 

Ralph Goers edited comment on LOG4J2-1094 at 4/27/16 2:51 PM:
--------------------------------------------------------------

It would actually be very simple to implement. All we need is a ListAppender that \
publishes the queued events when the Appender is stopped. That would not guarantee \
that some log events wouldn't appear out of order but I don't think that can be \
helped.


was (Author: ralph.goers@dslextreme.com):
It would actually be very simple to implement. All we need is a ListAppender that \
publishes the queued events when the Appender is stopped.

> 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
> Assignee: Ralph Goers
> 
> 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 find the code and the configuration here:
> - https://github.com/lburgazzoli/lb-chronicle/blob/master/chronicle-examples/chronic \
> le-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
>  {code}
> public class MtLogging {
> public static void main(final String[] args) throws Exception {
> //LogManager.getLogger("main");
> Thread th1 = new Thread(() -> {
> final String name = "thread-1";
> final Logger log = LogManager.getLogger(name);
> System.out.println("write " + name);
> log.info("message");
> System.out.println("done " + name);
> });
> Thread th2 = new Thread(() -> {
> final String name = "thread-2";
> final Logger log = LogManager.getLogger(name);
> System.out.println("write " + name);
> log.info("message");
> System.out.println("done " + name);
> });
> th1.start();
> th2.start();
> th1.join();
> th2.join();
> }
> }
> {code}
> {code}
> <?xml version="1.0" encoding="UTF-8"?>
> <configuration>
> <appenders>
> <Console name="STDOUT" target="SYSTEM_OUT">
> <PatternLayout pattern="[TEST] [%-5p] %c - %m%n%throwable{none}"/>
> </Console>
> </appenders>
> <loggers>
> <root level="all">
> <appender-ref ref="STDOUT"/>
> </root>
> </loggers>
> </configuration>
> {code}
> 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 (the problem no longer occurs):
> {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-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic