Log4j2:如何定义多个记录器

时间:2017-09-20 04:24:02

标签: log4j log4j2

我已经定义了多个记录器,如下所示(com.xyz和org.xyz)。 Log4j2忽略第一个记录器定义并仅加载第二个记录器定义。在示例中,未加载org.xyz。

{
  "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"}
      }
    }
  }
}

在下面找到log4j2调试消息。

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})

我的配置是否正确?

1 个答案:

答案 0 :(得分:2)

要在JSON logger配置文件中定义多个记录器,您应将array声明为logger array

使用{ "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"} } } } } ,您的配置文件将更改为 -

angular
  .module('MyApp', [])
  .directive(
    'clickMe',
    function() {
      return {
        link: function(scope, element) {
          element.on('click', function(event) {
            if (event.target.id == "one") {
              console.log('click');
            }
          });
        },
      };
    }
  );