首页 > 解决方案 > 如何在 Spring Boot 服务器启动期间查看自动配置日志输出

问题描述

如何在 Spring Boot 服务器启动期间查看自动配置日志输出

我创建了一个弹簧启动应用程序。它使用一个共享库(通过 maven 依赖的 Spring boot jar)。共享库类通过 META-INF/spring.factories 加载

我已经在 spring.factories 中提到了库中的类。共享库的工作是从 application.properties 中读取 Vault 角色 id 和 Vault secret id 值,并调用 REST API 并从 Vault 中获取 secret。获取秘密后,它会在系统属性中再次设置该值。

        for (Map.Entry<String, String> entry : allSecrets.entrySet())
        {
            System.setProperty(entry.getKey(), entry.getValue());
        }

一切都按预期工作。但我无法在我的日志中看到来自共享库的日志。共享库的包结构是 com.myorg.abc。我的spring boot包结构是com.myorg.xyz

我在应用程序属性中尝试了以下内容。

logging.level.root= DEBUG
logging.level.com.myorg.xyz: DEBUG
logging.level.com.myorg.abc: DEBUG
logging.level.org.springframework.boot.autoconfigure.logging=DEBUG

我只能从我的应用程序中获取日志,但不能从共享库中获取日志。但是当我将共享库 Logger.error 更改为 System.out 时,我会在我的应用程序中收到消息。如何在我的应用程序中查看共享库的日志。

标签: springspring-bootlogginglog4jslf4j

解决方案


Spring Boot 初始化日志记录至少 3 次。第一次发生在加载 SpringApplication 时。它在访问 Spring 中的任何内容之前创建一个 SLF4J Logger。这会导致您选择初始化的任何日志记录实现。默认情况下,它将使用 Spring jar 中的日志记录配置。使用 Log4j 2,您可以通过将 log4j.configurationFile 设置为所需配置的位置作为系统属性或 log4j.component.properties 文件来覆盖它。

Spring 所做的一切都将使用此配置进行记录,直到它再次初始化日志配置,这由 bootstrap.yml 控制。最后,您的应用程序的日志配置被初始化,该配置可以从 application.yml 或再次从 bootstrap.yml 配置。


推荐阅读