Björn Kautler created LOG4J2-2158:
-------------------------------------

             Summary: ThreadContext map is cleared => entries are only 
available for one log event
                 Key: LOG4J2-2158
                 URL: https://issues.apache.org/jira/browse/LOG4J2-2158
             Project: Log4j 2
          Issue Type: Bug
    Affects Versions: 2.10.0
            Reporter: Björn Kautler
            Priority: Critical


In 
{{org.apache.logging.log4j.core.impl.ThreadContextDataInjector.ForCopyOnWriteThreadContextMap.injectContextData}}
 without properties set, the result of 
{{ThreadContext.getThreadContextMap().getReadOnlyContextData()}} is returned 
which was saved in a variable called {{immutableCopy}}.

{{org.apache.logging.log4j.core.impl.ReusableLogEventFactory.createEvent}} 
calls {{result.clear()}} on that context data when the next log event is 
created.

Unfortunately the "immutable" copy is not immutable at all, but is cleared on 
the this call and all thread context map entries are lost.

If I set a {{Property}} on all loggers in the config, then the thread context 
map entries are not cleared, because the internal string map is not given out 
but the entries copied, but that property is also logged then of course.

If I instead set the system property {{log4j2.garbagefree.threadContextMap}}, 
the thread context map entries are also not cleared, as then also the entries 
are copied and not the internal structure given out.

>From what I have seen, I'd say there is a {{immutableCopy.freeze()}} missing 
>before the {{immutableCopy}} is returned inside the {{if}}-block.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to