Eng*_*_DJ 48 java spring spring-boot
是否可以在Spring Boot应用程序中单独通过环境变量设置日志记录级别?
我不想使用,application.properties因为我在Cloud Foundry上运行并希望在没有部署的情况下获取更改(但在应用程序重新启动后,或者重新开始更精确).
我已经尝试设置env vars,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=TRACE但这没有效果.把logging.level.org.springframework: TRACE在application.properties做的工作,虽然.
Tim*_*ler 60
这只是一个想法,但你尝试过设置
_JAVA_OPTIONS=-Dlogging.level.org.springframework=TRACE?
从理论上讲,这种方式-Dlogging.level.org.springframework=TRACE将作为默认的JVM参数传递,并且应该影响环境中的每个JVM实例.
Pet*_*ann 28
通过环境变量设置日志级别只能对包进行,而不能对类进行
我遇到了与 OP 相同的问题。我想知道为什么这里的一些用户报告提出的解决方案运行良好,而其他用户则表示没有。
我在Spring Boot 2.1 上,问题显然在过去几年有所改变,但目前的情况如下:
设置包的日志级别有效:
LOGGING_LEVEL_COM_ACME_PACKAGE=DEBUG
Run Code Online (Sandbox Code Playgroud)
为特定类设置日志级别无效:
LOGGING_LEVEL_COM_ACME_PACKAGE_CLASS=DEBUG
Run Code Online (Sandbox Code Playgroud)
看看 Spring Boot 的LoggingApplicationListener。
如果您调试它并在突出显示的代码块中设置断点,您会看到类的日志级别定义com.acme.mypackage.MyClass变为
com.acme.mypackage.myclass.
所以一个类的日志级别定义看起来就像一个包的日志级别定义。
这与 Spring 的Relaxed Binding 相关,它提出了环境变量的大写表示法。因此,类的典型驼峰式符号对于 LoggingApplicationListener 是不可见的:环境变量 forMyClass必须定义为MYCLASS并且将myclass在 Spring 的环境中可用(此示例忽略类的完全限定名称)。
一旦类的驼峰命名法丢失,在运行时就没有机会恢复原始类名。因此,环境变量中的日志定义不适用于类,而仅适用于包。
pep*_*uch 17
我还试图通过环境变量设置日志记录级别,但正如已经提到的那样,使用大写名称的环境变量是不可能的,例如.LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=DEBUG.我也不想通过application.properties或做_JAVA_OPTIONS.
在深入研究课程后,org.springframework.boot.logging.LoggingApplicationListener我检查了春季启动试图将日志级别设置DEBUG为ORG_SPRINGFRAMEWORK包,这不是真正的包名.因此,结论是您可以使用环境变量来设置日志记录级别,但它必须采用以下形式:
LOGGING_LEVEL_org.springframework=DEBUG
或
logging.level.org.springframework=DEBUG
在春季靴子1.5.3上测试
小智 7
是的,您可以使用环境变量控制日志记录级别.以下是我在Cloud Foundry平台上部署的Spring Boot应用程序的实现方法.
在您的日志配置文件中,为日志记录级别提供占位符以从环境变量中读取值.默认为INFO.
<logger name="com.mycompany.apps.cf" level="${APP_LOGGING_LEVEL:-INFO}">
<appender-ref ref="CONSOLE"/>
</logger>
Run Code Online (Sandbox Code Playgroud)
然后,在CF部署清单文件中提供环境变量.
applications:
- name: my-app-name
memory: 2048
env:
APP_LOGGING_LEVEL: DEBUG
我希望这将有所帮助.
从 Spring Boot 2.0.x 开始,这再次起作用。使用 Spring Boot v2.0.9.RELEASE 进行测试。例如启用连接池调试日志:
LOGGING_LEVEL_COM_ZAXXER=DEBUG java -jar myApp.jar
Run Code Online (Sandbox Code Playgroud)
或 Spring 框架调试日志:
LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=DEBUG java -jar myApp.jar
Run Code Online (Sandbox Code Playgroud)
或两者:
LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=DEBUG LOGGING_LEVEL_COM_ZAXXER=DEBUG java -jar myApp.jar
Run Code Online (Sandbox Code Playgroud)
有关更多应用程序属性,请参阅Spring Boot 参考文档中的“应用程序属性” 。
无论如何,我建议你使用 Spring 配置文件:
创建2个属性文件:
application-local.properties和
application-remote.properties
(配置文件名称显然可以不同)
相应地设置每个文件中的日志记录级别 ( logging.level.org.springframework)
-Dspring.profiles.active=local在本地和-Dspring.profiles.active=remoteCF 上运行您的应用程序。
小智 5
另外,在 Cloud Foundry 中使用 Spring Boot (v1.2.3),我发现可以使用环境变量调整根日志记录级别,如下所示:
$ cf set-env <app name> LOGGING_LEVEL_ROOT DEBUG
Run Code Online (Sandbox Code Playgroud)
不幸的是,似乎无法降低特定包的日志记录级别(至少对于我正在使用的 Java Buildpack 和 Spring Boot 版本)。例如,除了上述内容之外添加以下内容不会降低 Spring 框架的日志级别:
$ cf set-env <app name> LOGGING_LEVEL_ORG_SPRINGFRAMEWORK INFO
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用 Splunk 之类的工具来收集日志,则也许可以过滤掉噪音。
另一种看起来很有希望的替代方案可能是基于构建包参数选项的自定义(请参见此处):
$ cf set-env <app name> '{arguments: "-logging.level.root=DEBUG -logging.level.org.springframework=INFO"}'
Run Code Online (Sandbox Code Playgroud)
可悲的是,我无法让它真正发挥作用。我当然同意,能够在包级别重新配置日志记录级别而不更改应用程序代码将很容易开始工作。
| 归档时间: |
|
| 查看次数: |
42542 次 |
| 最近记录: |