无法使用 Spring 引导执行器更改日志级别

Unable to change log level using Spring Boot Actuator

我有两个现有的 Spring 引导应用程序,它们为记录器启用了执行器端点。

两者都有 Gradle 规则和 application.properties 条目,如下所示。

compile('org.springframework.boot:spring-boot-starter-actuator')
management.endpoints.web.exposure.include=env,loggers
management.endpoint.loggers.enabled=true 

但是,当我尝试如下更改日志级别时,它仅适用于第一个应用程序。

curl -s -X POST -H 'Content-Type: application/json' -d '{"configuredLevel": "debug"}' http://localhost:8080/actuator/loggers/com.zzz.yyy.ddd

我没有外化记录器配置文件(即它们在两个应用程序的 src/main/resources 中)。 经过一些挖掘后注意到第一个应用程序使用 logback.xml 和 SL4J 记录器,而第二个应用程序使用 log4j2-spring.xmlorg.apache.logging.logger。这可能是我们必须使用 logback/SL4J 来使执行器端点工作的日志级别更改的原因吗?

我的团队负责人帮助确定了问题。 log4j2-spring.xml 有多个具有多个自定义级别的文件附加程序,类似于下面列出的各种用途,如审计、备份、拒绝等。

    <Loggers>
        <Root level="WARN">
            <AppenderRef ref="Console" />
            <AppenderRef ref="defaultLogFile" level="info"/>
            <AppenderRef ref="MyAppAuditFile" level="auditLevel" />
            <AppenderRef ref="MyAppReplayFile" level="replayLevel" />
            <AppenderRef ref="MyAppBackupFile" level="backupLevel"/>
        </Root>
    </Loggers>

可以看出,默认日志文件的日志级别设置为信息,因此只有信息和更高级别会转到该文件,因此当日志级别更改为调试时,那些调试消息永远不会转到日志文件。由于控制台没有日志级别设置,导致调试消息显示在 IDE 中。所以解决方法是删除默认日志文件的 level 条目,就像控制台一样。