java Spring Boot 致动器:我可以一次改变整个软件包的记录器级别吗?

yzxexxkh  于 2023-03-06  发布在  Java
关注(0)|答案(2)|浏览(130)

在我的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.childconfiguredLevel,则更改com.parent的日志记录级别将更改com.parent.childeffectiveLevel
有没有办法在一个请求中覆盖所有子日志记录器级别,即使已经设置了configuredLevel
我试过使用*作为通配符,但是不起作用。我尝试做的事情是否可行,或者我必须分别重置所有子项的configuredLevel

3qpi33ja

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()中的条件块的约束。

iqjalb3h

iqjalb3h2#

通过寻找这个属性,我找到了一个可能有用的属性。使用curl,您可以将所需的日志记录级别发布为“”(零长度字符串),其效果是将configuredLevel设置为null。可以为层次结构中的子类或父类执行此操作,然后允许您动态地设置或取消设置父类或子类的日志记录级别。

相关问题