Uploaded image for project: 'Log4j 2'
  1. Log4j 2
  2. LOG4J2-3404

Leak of DefaultConfiguration instances

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.17.1
    • None
    • Configuration
    • 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

          Activity

            People

              ckozak Carter Kozak
              pkarwasz Piotr Karwasz
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: