On May 29, 2012, at 11:36 PM, Christian Grobmeier wrote:

> On Wed, May 30, 2012 at 7:59 AM, Ralph Goers <[email protected]> 
> wrote:
>> As I see it, the problem is that at least some of the users seem to be
>> expecting Log4j to magically know when to call clear. It can't. The
>> application has to do it.
>> 
>> All the MDC is is a ThreadLocal where each Thread has its own Map associated
>> with the ThreadLocal. You can get and put all you want. In a webapp, of
>> course, if you add stuff to the MDC at the beginning of a request then you
>> need to remove it all at the end of the request.  The normal pattern is
>> 
>> MDC.put(key, value);
>> try {
>>    call servlet
>> } finally {
>>   MDC.remove(key);
>> }
>> 
>> The problem with this is that it still leaves an empty Map in the
>> ThreadLocal. So when remove() removes the last element from the Map then the
>> Map is removed from the ThreadLocal.
> 
> OK understood. But actually isn't this happening with this fix?
> in remove0(key): if table isEmpty ->  call clear0()
> In clear(): tlm.remove

tlm.remove removes this thread's Map. Other threads are unaffected.

> 
> From what I understood now we are doing what we can do. Except, we can
> provide a FAQ description.
> 
>> FWIW, Logback suffered a similar issue
>> in http://jira.qos.ch/browse/LBCLASSIC-183.
> 
> Thank you. Interesting read. It seems one can only have a comfortable
> "fix" with Java > 5
> 
> Cheers
> Christian
> 
>> Ralph
>> 
>> 
>> On May 29, 2012, at 10:31 PM, Christian Grobmeier wrote:
>> 
>> Bringing this to the mailinglist.
>> 
>> Ralph, I understand what you explained below, but I am lost on how to
>> fix it. Do you have any more suggestions?
>> I must actually admit that I am not familiar with MDC at all, probably
>> that's my problem with it.
>> 
>> On Wed, May 30, 2012 at 7:26 AM,  <[email protected]> wrote:
>> 
>> https://issues.apache.org/bugzilla/show_bug.cgi?id=50486
>> 
>> 
>> --- Comment #37 from Ralph Goers <[email protected]> ---
>> 
>> Yes, that is what clear is for.
>> 
>> 
>> I don't see how Hierarchy.shutdown() can call MDC.clear(). Well, it could
>> but
>> 
>> it would only clear the thread the shutdown is performed on which isn't
>> likely
>> 
>> to help much.
>> 
>> 
>> Item 2 is likely to cause many problems.  MDC.clear only clears the current
>> 
>> thread's ThreadLocal. Reinitializing the MDC will cause problems for all the
>> 
>> other threads.
>> 
>> 
>> --
>> 
>> You are receiving this mail because:
>> 
>> You are the assignee for the bug.
>> 
>> 
>> ---------------------------------------------------------------------
>> 
>> To unsubscribe, e-mail: [email protected]
>> 
>> For additional commands, e-mail: [email protected]
>> 
>> 
>> 
>> 
>> 
>> --
>> http://www.grobmeier.de
>> https://www.timeandbill.de
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>> 
>> 
> 
> 
> 
> -- 
> http://www.grobmeier.de
> https://www.timeandbill.de
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to