wuqian created LOG4J2-2916:
------------------------------

             Summary: If loggercontext got reconfigured and kafka appender got 
recreated, the previous producer can not be closed, which cause thread leak
                 Key: LOG4J2-2916
                 URL: https://issues.apache.org/jira/browse/LOG4J2-2916
             Project: Log4j 2
          Issue Type: Bug
            Reporter: wuqian


If loggercontext got reconfigured and kafka appender got recreated, the 
previous kafka producer thread can not be closed, which cause thread leak

 

Repeat steps:

xml configured to use kafka appender

LoggerContext.getContext(false).reconfigure();
LoggerContext.getContext(false).reconfigure();
LoggerContext.getContext(false).reconfigure();
LoggerContext.getContext(false).reconfigure();
LoggerContext.getContext(false).reconfigure();
LoggerContext.getContext(false).reconfigure();
LoggerContext.getContext(false).reconfigure();
LoggerContext.getContext(false).reconfigure();

 

Resolution:

In case the abstractlogmanager always cache the latest new producer and old 
producer can not be released.

When creating new kafkamanager, add a logic to release previous kafka producer.

 

public void startup() {
 // If loggercontext reconfigured and kafka appender got recreated, the 
previous producer can not be closed
 // which cause thread leak
 if(producer != null){
 producer.close();
 }
 producer = producerFactory.newKafkaProducer(config);
}

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to