在我的Sping Boot 应用程序中,我已经启用了Actuators,我可以在以下位置看到我的所有记录器:localhost:8080/loggers
,如下所示:
"com.parent":{"configuredLevel":"INFO","effectiveLevel":"INFO"},
"com.parent.child":{"configuredLevel":"TRACE","effectiveLevel":"TRACE"}
[...]
现在我通过发送请求来更改日志记录级别:
curl -i -X POST -H 'Content-Type: application/json' -d '{"configuredLevel": "DEBUG"}' http://localhost:8080/loggers/com.parent
如果未设置com.parent.child
的configuredLevel
,则更改com.parent
的日志记录级别将更改com.parent.child
的effectiveLevel
。
有没有办法在一个请求中覆盖所有子日志记录器级别,即使已经设置了configuredLevel
?
我试过使用*
作为通配符,但是不起作用。我尝试做的事情是否可行,或者我必须分别重置所有子项的configuredLevel
?
2条答案
按热度按时间3qpi33ja1#
我认为不可能覆盖所有已经显式设置了子记录器级别的子记录器级别。
Sping Boot 的
LoggingEndpoint
委托给ch.qos.logback.classic.Logger.handleParentLevelChange()
,并且该方法在if(this.level == null) { }
上有一个条件块,因此当递归调用(遍历所有日志记录器)到达“com.parent.child”时,它将不执行任何操作,因为“com.parent.child”已经有一个分配的级别。当然,您可以在特定的日志记录器上设置configuredLevel,因为它调用
ch.qos.logback.classic.Logger.setLevel()
,因此不受handleParentLevelChange()
中的条件块的约束。iqjalb3h2#
通过寻找这个属性,我找到了一个可能有用的属性。使用curl,您可以将所需的日志记录级别发布为“”(零长度字符串),其效果是将configuredLevel设置为null。可以为层次结构中的子类或父类执行此操作,然后允许您动态地设置或取消设置父类或子类的日志记录级别。