Reputation: 33
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
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