通过环境变量在Spring Boot中设置日志级别
通过环境变量设置Spring Boot中的日志级别是可能的,但是需要注意环境变量的命名方式。在尝试使用大写的环境变量名称LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=DEBUG
时,无法成功设置日志级别。同时,也不想通过application.properties
或_JAVA_OPTIONS
来设置日志级别。
经过研究org.springframework.boot.logging.LoggingApplicationListener
类后,发现Spring Boot试图将日志级别设置为DEBUG
,但将ORG_SPRINGFRAMEWORK
作为包名,而这并不是真正的包名。因此,结论是可以通过环境变量来设置日志级别,但需要按照以下形式命名:
LOGGING_LEVEL_org.springframework=DEBUG
或者
logging.level.org.springframework=DEBUG
以上方法在Spring Boot 1.5.3版本中经过测试有效。但尝试在AWS上使用Spring Boot 1.3.8时,未能成功设置日志级别。然而,这种方法在SpringBoot 2.5.3版本中对我有效。
在Spring Boot中通过环境变量设置日志级别只能针对包进行操作,而不能针对类进行操作。这个问题的出现是因为在Spring Boot的LoggingApplicationListener中,对于类的日志级别定义会被转换成小写。因此,无法通过环境变量来为类设置日志级别。解决方法是可以使用SPRING_APPLICATION_JSON环境变量来设置日志级别,其值以JSON格式描述所需的属性。这个问题也被记录在Spring Boot的文档中,文档中提到如果需要为类配置日志级别,可以使用SPRING_APPLICATION_JSON变量。这个问题也适用于Quarkus框架。总结起来,通过环境变量设置日志级别只能针对包进行操作,对于类则需要使用SPRING_APPLICATION_JSON环境变量来进行配置。
问题的原因是希望通过环境变量设置Spring Boot日志级别,但尝试使用_JAVA_OPTIONS环境变量未能实现预期的效果。
解决方法是尝试使用-D参数来设置日志级别,并将此参数传递给java命令。具体地,可以尝试设置_JAVA_OPTIONS环境变量,并将参数-Dlogging.level.org.springframework=TRACE作为默认的JVM参数传递给每个JVM实例。在实践中,可以通过运行mvn spring-boot:run -Dlogging.level.org.springframework=TRACE命令来确认该方法是否有效。需要注意的是,环境变量_JAVA_OPTIONS的命名中的下划线是必需的。
此外,也可以尝试使用JAVA_OPTS环境变量来传递参数。对于Cloud Foundry Java Buildpack,可以查阅相关文档了解如何使用JAVA_OPTS环境变量。
另外,也有建议使用JAVA_TOOL_OPTIONS环境变量而不是_JAVA_OPTIONS,具体细节可以参考相关链接。
要通过环境变量设置Spring Boot日志级别,可以尝试使用_JAVA_OPTIONS、JAVA_OPTS或JAVA_TOOL_OPTIONS环境变量,并将-Dlogging.level.org.springframework=TRACE作为参数传递给java命令。具体方法可以参考上述链接中的相关文档。