java通过环境变量在Spring Boot中设置日志记录级别
在Spring引导应用程序中,是否可以仅通过环境变量设置日志记录级别
我不想使用application.properties
,因为我正在Cloud Foundry上运行,并且希望在不部署的情况下获取更改(但在应用程序重新启动或重新启动后更准确地说)
我尝试过将env变量设置为LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=TRACE
,但没有效果。不过,将logging.level.org.springframework: TRACE
放在application.properties
中确实有效
# 1 楼答案
同样在Cloud Foundry中使用Spring Boot(v1.2.3),我发现可以使用环境变量调整根日志记录级别,如下所示:
不幸的是,似乎无法降低特定软件包的日志记录级别(至少在我使用的Java Buildpack和Spring Boot版本中是这样)。例如,除了上述内容之外,添加以下内容并不会降低Spring framework的日志级别:
但是,如果您使用Splunk之类的工具来收集日志,则可以过滤掉噪音
另一个看起来很有希望的选择是基于构建包的参数选项的定制(请参见here):
遗憾的是,我无法让它真正起作用。我当然同意,能够在不更改应用程序代码的情况下在包级别重新配置日志记录级别将非常方便
# 2 楼答案
通过环境变量设置日志级别只能对包进行设置,而不能对类进行设置
我遇到了与OP相同的问题。我想知道为什么这里的一些用户报告说提议的解决方案很好,而其他人则回答说没有。
我使用的是Spring Boot 2.1,在过去几年中,问题明显发生了一些变化,但目前的情况如下:
TL;博士
设置包的日志级别有效:
虽然为特定的类设置日志级别没有效果:
怎么会这样
看看Spring Boot的LoggingApplicationListener
如果调试它并在突出显示的代码块中设置断点,就会看到类
com.acme.mypackage.MyClass
的日志级别定义变为com.acme.mypackage.myclass
因此,类的日志级别定义看起来与包的日志级别定义完全相同
这与Spring的Relaxed Binding有关,后者提出了环境变量的大写表示法。因此,对于LoggingApplicationListener,类的典型驼峰式表示法是不可见的:
MyClass
的环境变量必须定义为MYCLASS
,并且在Spring的环境中可以作为myclass
使用(这个示例忽略了类的完全限定名)一旦类的camel case符号丢失,在运行时就没有机会恢复原始类名。 因此,环境变量中的日志定义不适用于类,而只适用于包
# 3 楼答案
是的,您可以使用环境变量控制日志记录级别。下面是我如何为部署在Cloud Foundry平台上的Spring Boot应用程序实现的
在日志配置文件中,为日志级别提供占位符,以便从环境变量中读取值。默认值为INFO
然后,在CF部署清单文件中提供环境变量
我希望这会有所帮助
# 4 楼答案
这只是一个想法,但你试过设置吗
_JAVA_OPTIONS=-Dlogging.level.org.springframework=TRACE
理论上,这种方式
-Dlogging.level.org.springframework=TRACE
将作为默认JVM参数传递,并且应该影响环境中的每个JVM实例# 5 楼答案
从Spring Boot 2.0开始。这又起作用了。用Spring Boot v2测试。0.9.释放例如,启用连接池调试日志:
或Spring框架调试日志:
或者两者兼而有之:
有关更多应用程序属性,请参见"Application Poperties" in Spring Boot Reference Documentation
# 6 楼答案
我还试图通过环境变量设置日志记录级别,但如前所述,使用大写名称的环境变量是不可能的,例如
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上测试