【问题标题】:@SpringBootTest: pre-test logging set to debug by default?@SpringBootTest:预测试日志默认设置为调试?
【发布时间】:2021-07-06 14:06:34
【问题描述】:

一个简单的 spring-boot 项目 (Initializr link) 会生成一个 @SpringBootTest 类,该类会吐出以下 DEBUG 日志消息:

DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - ...
DEBUG org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider - ... 
DEBUG org.springframework.test.context.BootstrapUtils - ... 
DEBUG org.springframework.test.context.support.AbstractContextLoader - ...
DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - ...
DEBUG org.springframework.test.context.support.ActiveProfilesUtils - ...
DEBUG org.springframework.test.context.support.DependencyInjectionTestExecutionListener - ...
DEBUG org.springframework.test.context.support.TestPropertySourceUtils - ...

这发生在实际测试类开始执行之前。

  1. 启用该日志记录的配置在哪里?
  2. 此功能记录在哪里?
  3. 如何关闭?

谢谢!

【问题讨论】:

    标签: spring-boot logging


    【解决方案1】:

    除了@simon-martinelli 提供的信息之外,此Baeldung article 也可能会有所帮助。

    总而言之:您可以将 logback-test.xml 添加到测试类路径的根目录以配置日志级别以避免 DEBUG 日志或完全禁用日志记录。 :)

    【讨论】:

      【解决方案2】:

      SimonIngo 都提到了配置 logback,结果证明这是禁用调试消息的正确方法(最初,我放错了 logback conf 文件,这就是为什么我之前评论它没有工作。道歉)。

      src/test/resources/logback.groovy:

      import ch.qos.logback.classic.encoder.PatternLayoutEncoder
      
      appender('STDOUT', ConsoleAppender) {
          encoder(PatternLayoutEncoder) {
              pattern = '%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n'
          }
      }
      logger 'org.springframework.test', WARN
      root(INFO, ["STDOUT'])
      

      澄清一下:

      启用调试的配置不是 spring boot,而是logback default:

      假设配置文件 logback-test.xml 或 logback.xml 不存在,logback 将默认调用 BasicConfigurator...此外,默认情况下,root logger 被分配了 DEBUG 级别。

      org.springframework.test(例如BootstrapUtils)中的记录器是静态初始化的,所以当应用程序上下文被加载并读取application.properties时,这些记录器将已经构建,从ROOT继承它们的级别,默认为debug

      【讨论】:

      • 您之前评论过 Simons 的回答,即 Spring Boot 日志记录无法禁用这些消息。那还不正确吗?根据this answer,spring boot logging config不能用于使这些消息静音,但需要使用logback配置。
      • 没错。我发布的日志消息无法通过 application.properties 控制,因为它们在 spring boot 甚至初始化其上下文之前就被记录了。
      猜你喜欢
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2017-10-30
      相关资源
      最近更新 更多