日志组件可以在 springboot 加载配置文件之前启动吗?

2021-06-10 10:25:12 +08:00
 luxinfl
有个现象,当 application.yml 格式错误的时候,启动程序,控制台打印的日志格式并没有按照日志配置文件的来,甚至此时应该没有到日志组件加载的那一步。所以有没有什么方法可以让日志组件提前启动?

问这个问题的原因是,项目在 linux 用 java -jar xxz.jar >/dev/null 2>&1 &启动时,脚本把打印信息吞了,此时系统配置文件格式错误的日志也不会打印了。所以在不改动脚本的情况下可以吗????
1897 次点击
所在节点    程序员
13 条回复
suenlai
2021-06-10 10:43:58 +08:00
这个时候日志相关的 bean 还没有加载进来,springboot 好像有种机制是先把要打印的放在缓冲区, 等加载完后再打印。
luxinfl
2021-06-10 10:45:55 +08:00
@suenlai 那就是没法搞到指定文件?只能靠修改 shell 脚本来打印了么。有没有可能在监听器里面实现
suenlai
2021-06-10 10:57:28 +08:00
Deferred Log that can be used to store messages that shouldn't be written until the logging system is fully initialized.
你参考下这个 API:Deferred Log
suenlai
2021-06-10 11:12:28 +08:00
deferred log 在 logback 初始化前用的是 commons-logging
"
The name (<code>commons-logging.properties</code>) of the properties file to search for.
"
Aruforce
2021-06-10 11:17:35 +08:00
在 main 方法执行 application run 之前就使用 logger 。。。这样 logger 就在 application 启动之前启动了
Aruforce
2021-06-10 11:21:07 +08:00
@Aruforce 比如 logback 这种...但是 spring-logback.xml 和 logback.xml 不知道能不能共存..有个不确定的问题是 spring logger starter 会不会对 logback reconfigure... 如果不能的话。。spring-logback.xml 就没啥用了
wz497345846
2021-06-10 11:24:02 +08:00
写在 bootstrap.yml 里面
luxinfl
2021-06-10 14:21:11 +08:00
@suenlai 我去查一下,我今天才刚知道有这么个 log
luxinfl
2021-06-10 14:21:41 +08:00
@wz497345846 这个只是配置文件会优先读到吧
luxinfl
2021-06-10 14:22:36 +08:00
@Aruforce 我尝试过,但打印的格式不是自定义的,说明日志组件还是没有初始化完成吧
Aruforce
2021-06-10 17:06:55 +08:00
@luxinfl 因为你在使用 SpringBoot 我假定你在使用 spring-logback.xml 做日志组件的配置。。但是 logback 本身是默认读取 logback.xml 的。。。所以在 Springboot 对 logback 配置完成之前 logback 是在使用自己的默认配置...

你可以增加一个 logback.xml 并且里面有你自己的格式配置 这个可能要求配置参数不能依赖 springprofile...来验证
Aruforce
2021-06-10 17:10:20 +08:00
@Aruforce 或者你可以看看 LoggingApplicationListener SpringBootJoranConfigurator LoggingSystem LogbackLoggingSystem 这几个类。。。我是以前大略看过..不过大体启动逻辑和一些默认配置 就在这些类里面
Amit
2021-06-10 18:11:00 +08:00
log 组件是不依赖 spring 容器的,spring 启动后会通过 log 组件的 api 更新日志级别和格式,所以我猜启动的时候应该是用的默认格式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/782573

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX