Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.17.1
-
None
-
None
Description
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:
appenders: File: name: FILE fileName: logs/myfile.log
and running:
LogManager.getLogger("test");
will result in the following (redacted and commented) status logger output:
# 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
I can provide a PR to prevent the leaking of DefaultConfiguration s.
Attachments
Issue Links
- links to