首页 > 解决方案 > Log4j2 的 json 配置中包的不同日志记录级别

问题描述

如何在 Log4j2 的 json 配置中为包设置不同的日志记录级别?这是我的配置(减去附加程序的定义)

{
  "configuration": {
    "name": "Default2",
    "loggers": {
      "io.netty": {
        "level": "info",
        "appender-ref": [{
          "ref": "Console"
        }]
      },
      "root": {
        "level": "debug",
        "appender-ref": [{
          "ref": "Console"
        }, {
          "ref": "File"
        }]
      }
    }
  }
}

它适用于root记录器,但当我添加io.netty以下错误时失败

2021-01-26 13:16:04,677 main ERROR Unable to locate plugin for io.netty
2021-01-26 13:16:18,132 main ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.config.LoggersPlugin for element loggers: java.lang.NullPointerException java.lang.NullPointerException
    at org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor.visit(PluginElementVisitor.java:52)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.generateParameters(PluginBuilder.java:258)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:135)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1002)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:942)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:552)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:288)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:622)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:695)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:712)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:267)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:245)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:664)

我错过了什么?也许 log4j2 不理解通配符设置?

标签: log4j2

解决方案


结果包前缀应该在“name”属性中指定,而不是在“loggers”元素的键中。

"loggers": {
  "logger": [
    {
      "name": "root",
      "level": "debug",
      "additivity": false,
      "appender-ref": [ { "ref": "Console" }, { "ref": "File" } ]
    },
    {
      "name": "io.netty",
      "level": "info",
      "additivity": false,
      "appender-ref": [ { "ref": "Console" }, { "ref": "File" } ]
    }
  ]
}

另请注意,星号 ( io.netty.*) 不起作用。


推荐阅读