Piotr P. Karwasz created LOG4J2-3404:
----------------------------------------

             Summary: Leak of DefaultConfiguration instances
                 Key: LOG4J2-3404
                 URL: https://issues.apache.org/jira/browse/LOG4J2-3404
             Project: Log4j 2
          Issue Type: Bug
          Components: Configuration
    Affects Versions: 2.17.1
            Reporter: Piotr P. Karwasz


If an appender does not specify a layout a default {{PatternLayout}} is created 
*together* with a {{{}DefaultConfiguration{}}}, which is never stopped nor 
attached to a {{{}LoggerContext{}}}.

For example, if we using a simple file appender:
{code:java}
  appenders:
    File:
      name: FILE
      fileName: logs/myfile.log {code}
and running:
{code:java}
LogManager.getLogger("test");{code}
will result in the following (redacted and commented) status logger output:
{code:java}
# DefaultConfiguration from LoggerContext constructor
DEBUG StatusLogger Starting OutputStreamManager SYSTEM_OUT.false.false-1
# Spurious DefaultConfiguration used to create default PatternLayout
# This manager will **never** stop
DEBUG StatusLogger Starting OutputStreamManager SYSTEM_OUT.false.false-2
# My appender
DEBUG StatusLogger Starting FileManager logs/myfile.log
# The first DefaultConfiguration stops
DEBUG StatusLogger Shutting down OutputStreamManager SYSTEM_OUT.false.false-1
DEBUG StatusLogger OutputStream closed
DEBUG StatusLogger Shut down OutputStreamManager SYSTEM_OUT.false.false-1, all 
resources released: true
DEBUG StatusLogger Appender DefaultConsole-1 stopped with status true
TRACE StatusLogger DefaultConfiguration stopped 1 remaining Appenders.
TRACE StatusLogger DefaultConfiguration cleaning Appenders from 1 LoggerConfigs.
DEBUG StatusLogger Stopped 
org.apache.logging.log4j.core.config.DefaultConfiguration@145f66e3 OK
# At JVM shutdown
TRACE StatusLogger Stopping 
YamlConfiguration[location=D:\Examples\log4j\target\classes\log4j2.yml]...
TRACE StatusLogger YamlConfiguration notified 2 ReliabilityStrategies that 
config will be stopped.
TRACE StatusLogger YamlConfiguration stopping 1 LoggerConfigs.
TRACE StatusLogger YamlConfiguration stopping root LoggerConfig.
TRACE StatusLogger YamlConfiguration notifying ReliabilityStrategies that 
appenders will be stopped.
TRACE StatusLogger YamlConfiguration stopping remaining Appenders.
DEBUG StatusLogger Appender CONSOLE stopped with status true
TRACE StatusLogger YamlConfiguration stopped 1 remaining Appenders.
TRACE StatusLogger YamlConfiguration cleaning Appenders from 2 LoggerConfigs.
DEBUG StatusLogger Stopped 
YamlConfiguration[location=D:\Examples\log4j\target\classes\log4j2.yml] OK{code}

I can provide a PR to prevent the leaking of {{DefaultConfiguration}}s.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to