[
https://issues.apache.org/jira/browse/LOG4J2-3404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on LOG4J2-3404 started by 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)