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)