Tomcat >=6.0.24 comes with a pre-configured "memory leak detection" listener 
that cleans up when an application is shutdown.

It particularly complains about ThreadLocal in log4j's MDC (many such log 
statements):

A web application created a ThreadLocal with key of type 
[org.apache.log4j.helpers.ThreadLocalMap] (value 
[org.apache.log4j.helpers.threadlocal...@5212bc]) and a value of type 
[java.util.Hashtable] (value [{}]) but failed to remove it when the web 
application was stopped. To prevent a memory leak, the ThreadLocal has been 
forcibly removed.

One can see that the Hashtable in the ThreadLocal is empty but that doesn't 
seem to be enough as the ThreadLocal itself is not empty....

I'm using the MDC in a ServletContextFilter like so:

try {
  if (request instanceof HttpServletRequest) {
    HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    Principal principal = httpServletRequest.getUserPrincipal();
    if (principal != null) {
      MDC.put(MDC_PRINCIPAL_KEY, principal.getName());
    }
  }
  chain.doFilter(request, response);
} finally {
  MDC.remove(MDC_PRINCIPAL_KEY);
}


Do I have a chance to properly clear the ThreadLocal variable?

Regards,
Marcel

-- 
Marcel Stör, http://www.frightanic.com
Couchsurfing: http://www.couchsurfing.com/people/marcelstoer
O< ascii ribbon campaign - stop html mail - www.asciiribbon.org


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to