user8426833
user8426833

Reputation: 33

Log4j2: How to define multiple loggers

I have defined the multiple loggers as seen below(com.xyz and org.xyz). Log4j2 is ignoring the first logger definition and loads only the second one. In the example, the org.xyz is not loaded.

{
  "configuration": {
    "name": "Default",
    "appenders": {
      "Console": {
        "name": "Console-Appender",
        "target": "SYSTEM_OUT",
        "PatternLayout": {"pattern": "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"}
      }
    },
    "loggers": {
      "logger": {
        "name": "org.xyz",
        "level": "info",
        "appender-ref": [{"ref": "Console-Appender","level": "info"}]
      },
      "logger": {
        "name": "com.xyz",
        "level": "debug",
        "appender-ref": [{"ref": "Console-Appender", "level": "debug"}]
      },
      "root": {
        "level": "warn",
        "appender-ref": {"ref": "Console-Appender","level": "warn"}
      }
    }
  }
}

Find below the log4j2 debug messages.

DEBUG StatusLogger Processing node for object loggers
DEBUG StatusLogger Processing node for object logger
DEBUG StatusLogger Node name is of type STRING
DEBUG StatusLogger Node level is of type STRING
DEBUG StatusLogger Node additivity is of type STRING
DEBUG StatusLogger Processing node for array appender-ref
DEBUG StatusLogger Processing appender-ref[0]
DEBUG StatusLogger Returning logger with parent loggers of type logger:class     org.apache.logging.log4j.core.config.LoggerConfig
DEBUG StatusLogger Processing node for object root
DEBUG StatusLogger Node level is of type STRING
DEBUG StatusLogger Processing node for object appender-ref
DEBUG StatusLogger Node ref is of type STRING
DEBUG StatusLogger Node level is of type STRING
DEBUG StatusLogger Returning appender-ref with parent root of type appender-ref:class org.apache.logging.log4j.core.config.AppenderRef
DEBUG StatusLogger Returning root with parent loggers of type root:class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger
DEBUG StatusLogger Returning loggers with parent root of type loggers:class org.apache.logging.log4j.core.config.LoggersPlugin
DEBUG StatusLogger Completed parsing configuration
DEBUG StatusLogger Building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig].
DEBUG StatusLogger createLogger(additivity="false", level="DEBUG", name="com.xyz", includeLocation="null", ={Console-Appender}, ={}, Configuration(Default), Filter=null)
DEBUG StatusLogger Building Plugin[name=appender-ref, class=org.apache.logging.log4j.core.config.AppenderRef].
DEBUG StatusLogger createAppenderRef(ref="Console-Appender", level="WARN", Filter=null)
DEBUG StatusLogger Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger].
DEBUG StatusLogger createLogger(additivity="null", level="WARN", includeLocation="null", ={Console-Appender}, ={}, Configuration(Default), Filter=null)
DEBUG StatusLogger Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
DEBUG StatusLogger createLoggers(={com.xyz, root})

Is my configuration correct?

Upvotes: 3

Views: 1859

Answers (1)

Vikas Sachdeva
Vikas Sachdeva

Reputation: 5803

For defining multiple loggers in log4j2 JSON configuration file, you should declare logger as array.

With logger array, your configuration file would change to below -

{
  "configuration": {
    "name": "Default",
    "appenders": {
      "Console": {
        "name": "Console-Appender",
        "target": "SYSTEM_OUT",
        "PatternLayout": {"pattern": "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"}
      }
    },
    "loggers": {
      "logger": [
                {
                   "name": "org.xyz",
                   "level": "info",
                   "appender-ref": [{"ref": "Console-Appender","level": "info"}]
                },
                {
                   "name": "com.xyz",
                   "level": "debug",
                   "appender-ref": [{"ref": "Console-Appender", "level": "debug"}] 
                }
                ],
      "root": {
        "level": "warn",
        "appender-ref": {"ref": "Console-Appender","level": "warn"}
      }
    }
  }
}

Upvotes: 3

Related Questions