当前位置: 首页 > 知识库问答 >
问题:

Log4j2:如何定义多个记录器

尹善
2023-03-14

我定义了多个记录器,如下所示(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个答案

苏麒
2023-03-14

为了在配置文件中定义多个记录器,您应该将记录器声明为数组

使用记录器阵列,您的配置文件将更改为-

{
  "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"}
      }
    }
  }
}
 类似资料:
  • 我正在用Java编写一个REST服务(在Tomcat 9上使用JAX-RS标准),我想向我的程序添加日志,以便在调用时跟踪他的工作。 因此,我使用Log4j(版本1.2.17)来编写日志,我想为在REST服务上运行的每个服务编写不同的日志文件,但我只需要为整个应用程序使用一个Log4j属性 所以我想在我的日志文件夹中保存这种日志 所以我把它写成Log4j(restServiceLogger.pro

  • 由此我从NetBeans得到以下错误消息: 所有异常消息都写入控制台,包括用户日志的消息。所以我知道两个伐木工都在工作。记录器附加器写入文件OK。userLog记录器不会创建任何文件,它使用几乎相同的附加器。 看来我还没有正确地命名一些东西来允许log4j2找到记录器。我试过各种命名的组合来弄对它,但我搞不清问题出在哪里。 我必须在每个类的记录器初始化中包含类名吗? 编辑:我需要包含包名。我花了一

  • 我需要支持将特定包登录到聊天中。将错误记录到错误中。日志如何做到这一点?到目前为止,我在几个appender中创建了阈值过滤器,但出现了错误。日志保持为空并进行聊天。日志有一个条目,它不属于特定的包。毕竟,我仔细阅读了log4j的文档,也尝试了2天来解决这个问题,并在网站和youtube上学习了一些教程。我还尝试了以下方法:使用Log4j2进行apachelog4j2包特定的日志记录。xml我也尝

  • 问题内容: 我在应用程序中使用log4j2。 我想要的是将要进行调试的所有内容都放入控制台,将要进行“信息”的所有内容都进入myapp.log,仅将“信息”的所有内容都进入“ myapp- audit.log”。 原因是,INFO主要由成功的数据修改组成(例如,“用户创建”,“用户更新”,“用户删除”等)。如果有效,则为数据修改的审核日志。 但是我不知道该怎么做。 如何仅获取“信息”以登录到“ m