无法使用 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.xml
和 org.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
条目,就像控制台一样。
我有两个现有的 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.xml
和 org.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
条目,就像控制台一样。