Spring Boot Actuator:我可以一次性更改整个包的记录器级别吗?

时间:2017-06-14 19:04:18

标签: java spring logging spring-boot-actuator

在我的Spring Boot应用程序中,我启用了执行器,我可以在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

如果configuredLevel的{​​{1}}未设置,则更改com.parent.child的日志记录级别会更改com.parent' s {{1 }}

是否有办法在单个请求中覆盖所有子级的记录器级别,即使已设置com.parent.child

我尝试使用effectiveLevel作为通配符,但它没有用。我试图做的是什么,或者我必须分别重置所有孩子的configuredLevel

1 个答案:

答案 0 :(得分:0)

我不认为可以覆盖已经明确设置子记录器级别的所有子记录器级别。

Spring Boot的LoggingEndpoint委托给ch.qos.logback.classic.Logger.handleParentLevelChange()并且该方法在if(this.level == null) { }上有一个条件块,所以当递归调用(遍历所有记录器)到达&# 34; com.parent.child"它什么都不会因为" com.parent.child"已经有一个指定的级别。

当然,您可以在特定记录器上设置configuredLevel,因为它调用ch.qos.logback.classic.Logger.setLevel(),因此不受handleParentLevelChange()中条件块的约束。