spring boot 使用 logback-test.xml 而不是 logback.xml

ade*_*ood 5 logback slf4j gradle build.gradle spring-boot

我有一个 gradle 项目,结构如下所示

>
> main (one project)
> shared (another project)
> api 
>> shared2 (another project)
Run Code Online (Sandbox Code Playgroud)

main 项目依赖于 shared 和 shared2 项目。shared 和 shared2 项目在其 src/ test/resources 文件夹中都有一个 logback-test.xml,主项目在其 src/ main/resources 文件夹中有一个 logback.xml 。

当我使用主 Application 类在 Eclipse 中运行主项目时,我期望在类路径中只加载 logback.xml。相反,我看到了发现多个 slf4j 绑定的警告,更重要的是,日志设置是从 logback-test.xml 而不是 logback.xml 应用的。这是进一步说明的文件夹结构

>
> main
> > src/main/resources
> > > logback.xml
> shared
> > src/test/resources
> > > logback-test.xml
> api/shared2
> > src/test/resources
> > > logback-test.xml
Run Code Online (Sandbox Code Playgroud)

在两个 logback-test.xml 文件中,我都在 DEBUG 级别启用了 org.springframework 调试,而在 logback.xml 中,它在 INFO 级别进行了设置。当我启动应用程序时,我会看到 spring 调试日志。

这是示例 github 项目 https://github.com/adeelmahmood/logback-test-conf-issue

Mit*_*hun 7

以下是 logback 库查找配置 xml 文件的顺序:(来自文档)

  1. Logback 尝试在类路径中找到一个名为 logback.groovy 的文件。

  2. 如果没有找到这样的文件,logback 会尝试在类路径中找到一个名为 logback-test.xml 的文件。

  3. 如果没有找到这样的文件,它会检查类路径中的文件 logback.xml..

  4. 如果两个文件都没有找到,logback 会使用 BasicConfigurator 自动配置自己,这将导致日志输出被定向到控制台。

因此,在您的情况下,logbacklogback-test.xml在类路径中找到并相应地记录。

您可以通过设置名为 的系统属性来指定您自己的配置文件位置logback.configurationFile

  • 我将其标记为已回答,但我认为在运行非测试代码时,以某种方式也可以访问测试类路径是没有意义的。通常情况并非如此。 (3认同)