log4j2 - 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 不理解通配符设置?
解决方案
结果包前缀应该在“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.*
) 不起作用。
推荐阅读
- puppet - Puppet 有条件地连接列表
- python - Python平衡括号错误与索引和缩进
- c++ - 在 C++ 中从 Base 对象转换为 Derived 对象
- javascript - 澄清作用域变量在 Javascript 闭包的上下文中的行为方式
- visual-studio-code - 调试时未部署VS代码扩展依赖项?
- python - 将 Scrapy 中建立的会话 cookie 传递给 Splash 以用于抓取 js 页面
- javascript - 无法设置克隆元素的宽度和高度
- c++ - _mm_prefetch 是异步的吗?分析显示了很多循环
- nginx - 如何在 Nginx 中为 Janus REST api 和 socket api 设置反向代理?
- typescript - 从导入的类型重命名接口