YON Blog

SpringBoot 日志初始化

以使用 log4j2 为例,在 SpringBoot 里我们如果要对 log4j2 进行配置,可以在 resources 里建一个 log4j2.xml 或者 log4j2-spring.xml 的文件,使用这两个的区别是什么呢?log4j2.xml 是 log4j2 框架本身默认的配置文件名,log4j2-spring.xml 是 SpringBoot 的默认的 log4j2 的配置文件名,如果使用前者,那么 SpringBoot 就无法完整的控制日志上下文的初始化过程。我们知道,SpringBoot 有一些通用的日志配置选项,例如 logging.level.root控制日志级别,这些是日志框架无关的,如果不让 SpringBoot 来初始化日志上下文,那么这些配置就没法立刻生效。

为了实现这套机制 SpringBoot 实现了应用监听器 LoggingApplicationListener,应用一启动就会调用 LoggingSystem 来进行上下文初始化,对于每个日志框架 SpringBoot 都有对应的 LoggingSystem 实现。

另外,以 log4j2 为例,SpringBoot SpringBootConfigurationFactory 实现了 ConfigurationFactory 接口,当 log4j2 默认的配置加载器加载不到配置时,就会使用 SpringBootConfigurationFactory 加载配置,防止启动时 logger 打印出找不到配置的 waring 信息。