[ https://issues.apache.org/jira/browse/LOG4J2-3404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Carter Kozak reassigned LOG4J2-3404: ------------------------------------ Assignee: Carter Kozak > 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 > Assignee: Carter Kozak > Priority: Major > > 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 > DEBUG StatusLogger Starting LoggerContext[name=2437c6dc, > org.apache.logging.log4j.core.LoggerContext@45752059]... > DEBUG StatusLogger Reconfiguration started for context[name=2437c6dc] at URI > null (org.apache.logging.log4j.core.LoggerContext@45752059) with optional > ClassLoader: null > # 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 > DEBUG StatusLogger Starting configuration > YamlConfiguration[location=D:\Examples\log4j\target\classes\log4j2.yml] > DEBUG StatusLogger Started configuration > YamlConfiguration[location=D:\Examples\log4j\target\classes\log4j2.yml] OK. > # The first DefaultConfiguration stops > # > TRACE StatusLogger Stopping > org.apache.logging.log4j.core.config.DefaultConfiguration@145f66e3... > 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)