[Springboot+Logback]已定义日志路径但仍生成了LOG_PATH_IS_UNDEFIEND文件夹之解决办法

目录

1、问题描述

2、分析过程

3、解决办法

4、其他


1、问题描述

自己写练习项目的时候,在application.yml中定义了logging.file.path:

logging:
  file:
    path: ./logs

也在logback-spring.xml中配置了LOG_HOME:

<springProperty scope="context" name="LOG_HOME" source="logging.file.path" />

看起来没什么问题,但是启动项目后,出现了两个日志文件夹,其中一个是预先定义的logs文件夹,另一个则是LOG_HOME_IS_UNDEFINED:

 查看控制台的日志发现有一段日志信息比Spring boot的banner都更先出现:

感觉很奇怪。

2、分析过程

在网上找了半天资料,大部分说是logback启动早于spring boot,所以一开始未读取到application.yml中的LOG_HOME,转而创建了LOG_HOME_IS_UNDEFINED,在后续读到LOG_HOME后才在正确的路径输出日志。

但是俺其他的spring boot项目中并没有遇到过这种情况,所以感觉觉得这个说法不完全正确,猜测是这个项目中的某个依赖中的日志组件提前启动导致的这个问题,然后挨个排查,发现把这个依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-context</artifactId>
</dependency>

删除后就不会出现这个问题了。

原来是spring cloud的锅。然后又去stack overflow上查了下相关问题,发现有个老哥说了这么一段话:

During spring cloud's boostraping process, bootstrap.properties is loaded before application.properties. If we don't specify log.path in bootstrap.properties then can not find this path and logback creates an LOG_PATH_IS_UNDEFINED directory. After the bootstrap process logback is re-initialized with right configuration. Seems to be related to Spring cloud. 

这老哥的大概意思是:

spring cloud项目启动时会先读取bootstrap.properties中的配置,然后再去读取application.properties中的配置。如果bootstrap.properties没有配置LOG_HOME,那logback就去自己生成LOG_HOME_IS_UNDEFINED日志目录了。

看到这里解决方法也就出来了。 

3、解决办法

如果你是spring cloud项目,把logging.file.path的定义放到bootstrap.properties里去就行

非spring cloud项目不会去读取bootstrap.properties,如果还是出现了LOG_HOME_IS_UNDEFINED,那可能只是路径配置错了,仔细检查一下吧。

其他方案

看了下别人的解决办法,有些是推荐把logback-spring.xml的重命名一下,比如改成logback-custom.xml,然后在application.properties里面去指定日志的配置文件:

logging:
  config: classpath:logback-custom.xml

这样在spring cloud项目启动时无法自行找到并读取logback的配置文件,也就不会输出日志,直到读取application.properties之后才会去加载日志配置。

4、其他

又去查了下bootstrap.properties和application.properties的区别,下面是chatgpt老师的回答:

bootstrap.propertiesapplication.properties是Spring Boot应用程序中两个不同的配置文件。

bootstrap.properties文件是Spring Boot应用程序在启动时加载的第一个配置文件。这个文件通常包含一些应用程序的关键配置,比如连接到配置服务器的信息、配置日志框架等。在Spring Cloud应用程序中,bootstrap.properties文件通常用于配置Spring Cloud Config Server,用于从远程配置服务器中获取应用程序的配置信息。在Spring Boot应用程序中,bootstrap.properties文件的优先级高于application.properties

application.properties文件是应用程序的主要配置文件,包含了所有应用程序的配置信息,例如应用程序的端口号、数据库连接等。

总的来说,bootstrap.properties是启动应用程序所必需的配置,而application.properties是应用程序的运行配置。

小白受教了orz

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值