通过环境变量在Spring Boot中设置日志级别
是否可以在Spring Boot应用程序中单独通过环境变量设置日志记录级别?
我不想使用application.properties
因为我在Cloud Foundry上运行,并希望在没有部署的情况下获取更改(但是在应用程序重新启动后,或者重新开始更精确)。
我已经尝试设置像LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=TRACE
这样的env变量,但这没有效果。 将logging.level.org.springframework: TRACE
放在application.properties
确实可行。
这只是一个想法,但你尝试过设置
_JAVA_OPTIONS=-Dlogging.level.org.springframework=TRACE
?
从理论上讲,这种方式-Dlogging.level.org.springframework=TRACE
将作为默认的JVM参数传递,并且应该影响环境中的每个JVM实例。
我还尝试通过环境变量设置日志记录级别,但正如已经提到的那样,使用大写名称的环境变量是不可能的,例如。 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
测试弹簧靴1.5.3
是的,您可以使用环境变量控制日志记录级别。 以下是我在Cloud Foundry平台上部署的Spring Boot应用程序的实现方法。
在您的日志配置文件中,为日志记录级别提供占位符以从环境变量中读取值。 默认为INFO。
然后,在CF部署清单文件中提供环境变量。
应用: - name:my-app-name 记忆:2048 ENV: APP_LOGGING_LEVEL:DEBUG
我希望这将有所帮助。
无论如何我建议你使用Spring配置文件:
-
创建2个属性文件:
application-local.properties
和application-remote.properties
(配置文件名称可能明显不同)
-
相应地设置每个文件中的日志记录级别(
logging.level.org.springframework
) -
使用
-Dspring.profiles.active=local
本地运行应用程序,使用-Dspring.profiles.active=remote
运行CF.
人们可以解释为什么这不起作用吗?
$ export LOGGING_LEVEL_COM_ACME =错误
对于使用环境变量的所有其他配置,作为覆盖似乎没有问题,例如:
$ export EUREKA_CLIENT_ENABLED = false
谢谢。
同样在Cloud Foundry中使用Spring Boot(v1.2.3),我发现可以使用环境变量调整根日志记录级别,如下所示:
$ cf set-env LOGGING_LEVEL_ROOT DEBUG
不幸的是,似乎没有可能调低特定软件包的日志记录级别(至少使用我正在使用的Java Buildpack和Spring Boot版本)。 例如,除了上面的内容之外添加以下内容并不会降低Spring框架的日志级别:
$ cf set-env LOGGING_LEVEL_ORG_SPRINGFRAMEWORK INFO
如果您使用Splunk之类的东西收集日志,您可能会过滤掉噪音。
另一个看起来很有希望的替代方案可能是基于build pack的arguments选项的定制(参见这里 ):
$ cf set-env '{arguments: "-logging.level.root=DEBUG -logging.level.org.springframework=INFO"}'
可悲的是,我无法实现这一点。 我当然同意能够在不更改应用程序代码的情况下在包级别重新配置日志记录级别将非常方便。
这是一个使用Logback和Janino有条件地通过属性或环境变量包含不同日志配置的示例…基本配置,logback.xml使用条件进行开发控制台日志记录或生产文件日志记录…只需将以下文件放入/resources/
logback.xml
dev.xml
utf-8 %-30([%p] [%c:%L]) » %m%n%rEx true
pro.xml
FILE_NAME_PATTERN 7 ${FILE_LOG_PATTERN} 512