我有一个带有本地 application.properties 文件的 Spring Boot 应用程序,其中包含:
logging.config=src/main/resources/local/logback-dev.xml
在这个logback-dev.xml文件中,有一个带有本地路径的文件追加器(比如/local/path/log/(
当部署到不同的环境(比如PROD(时,部署的人使用他自己的application.properties文件作为外部化配置(--spring.config.location=...(,其中包括:
logging.config=/prod/path/logback-prod.xml
在该 logback-prod.xml 文件中,有一个具有不同路径的文件追加器(例如/prod/path/log/(
运行应用程序时,会出现错误,因为似乎两个文件都被利用了:我们进入/prod/path/log/消息中存在的日志,例如">找不到路径/local/path/log/">
有人可以解释一下这里发生了什么吗?我以为外部化的配置会覆盖本地配置,但这里有些奇怪。
我们遇到了同样的问题,并在此文档的帮助下找到了解决方案:外部配置https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config应用程序属性https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config-application-property-files
在Pom中,我们添加了:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/application.properties</exclude>
<exclude>**/application-development.properties</exclude>
<exclude>**/application-production.properties</exclude>
<exclude>**/logback.xml</exclude>
</excludes>
</configuration>
</plugin>
希望这将解决您的问题并有助于理解。
据我所知,将logging.config
放在您的application.properties
或命令行中作为应用程序选项(--logging.config
(没有任何效果。看起来这些属性的处理是在日志记录初始化之后进行的,因此其中定义的任何属性都会太晚添加到环境中。
这让你想知道为什么他们甚至拥有logging.config
属性。我需要深入研究一下:-(
什么工作: 通过设置 system 属性logback.configurationFile
来使用本机 Logback 方法来指定配置文件,例如,通过在-jar
或mainclass
参数之前在java
命令行上传递-Dlogback.configurationFile
。您可以在此处传递不同的文件名,具体取决于您运行的环境(开发、生产(。如果你省略它,Spring 最终会在你的类路径上找到logback.xml
(来自源代码中的src/main/resources
(,这听起来像你想要的默认值。