

























[AI生成]
这一行代码的作用是:引入 Spring Boot 官方预定义的 Logback 基础配置文件。
在 logback-spring.xml 中,你可以把它理解为一个“宏”或者“包含文件”。当 Logback 启动并解析你的 logback-spring.xml 时,遇到这一行,它会自动去 classpath 中找到 org/springframework/boot/logging/logback/base.xml 这个文件,并把里面的全部内容原封不动地“粘贴(复制)”到当前的位置。
下面详细拆解这行代码背后的机制和它具体引入了什么内容:
Spring Boot 的 jar 包内部自带了这个文件。你可以在 Spring Boot 的源码或依赖包中找到它。它的真实路径在 Spring Boot 内部如下:
spring-boot-x.x.x.jar -> org/springframework/boot/logging/logback/base.xml
base.xml 里面到底有什么内容?打开 Spring Boot 的源码,你会发现 base.xml 的内容大致如下:
<configuration>
<!-- 再次引入默认的日志级别和转换规则 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义控制台输出的 Appender,名字叫 CONSOLE -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>
</appender>
<!-- 定义一个不是立即生效的文件输出 Appender,名字叫 FILE -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${FILE_LOG_CHARSET}</charset>
</encoder>
<!-- 具体的文件滚动策略配置... -->
</appender>
<!-- 根日志记录器,级别为 INFO,同时输出到控制台和文件 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
从中可以看出,base.xml 帮我们做完了以下几件“累活”:
defaults.xml:
defaults.xml 里定义了我们上次提到过的彩色日志转换规则(%clr)。${CONSOLE_LOG_PATTERN}。${FILE_LOG_PATTERN}。application.yml 中设定的 logging.pattern.console 等变量)。CONSOLE):你不需要自己写 <appender name="CONSOLE" ...> 了。FILE):包括按天滚动、文件大小限制等。root level="INFO")。logback-spring.xml 中加上这行,意味着什么?假设你的 logback-spring.xml 这样写:
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
</configuration>
效果等同于:你完全采用了 Spring Boot 默认的日志配置(控制台带颜色输出、同时生成一个滚动文件、默认 INFO 级别)。
实际上,如果你仅仅需要默认配置,你连 logback-spring.xml 都不用建。Spring Boot 默认就会加载这个 base.xml。
主要有两个常见场景:
引入 base.xml 后,Spring Boot 已经帮你定义好了名为 CONSOLE 和 FILE 的 appender。你只需要写一点点代码即可,比如你想把 com.example.demo 包的日志级别改成 DEBUG,你不需要重新写一大堆 <appender> 和 <pattern>,直接这样写即可:
<configuration>
<!-- 引入基础配置,生成了 CONSOLE 和 FILE 两个输出源,并设置了 root 为 INFO -->
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!-- 仅仅针对自己的包做特殊日志级别设置,且复用 base.xml 中的 CONSOLE -->
<logger name="com.example.demo" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
</configuration>
defaults.xml 而不引入 base.xml有时候我们觉得 base.xml 太“黑盒”了,我们想自己完全掌控 CONSOLE 和 FILE 的格式和文件路径,但我们又想白嫖 Spring Boot 提供的彩色格式 %clr 和那些环境变量。
这时候,我们通常不引入 base.xml,而是引入更底层的 defaults.xml:
<configuration>
<!-- 只引入默认变量、规则和颜色 %clr,不自动生成 appender 和 root -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 自己定义 pattern,使用 defaults.xml 里提供的 ${CONSOLE_LOG_PATTERN} 变量 -->
<appender name="MY_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="MY_CONSOLE"/>
</root>
</configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/> 的意思就是:
“让我用 Spring Boot 开箱即用的全套标准日志配置,我不想去手写那些复杂的彩色控制台模板和文件滚动策略了,直接拿来主义。”
特别提醒:如果你引入了 base.xml,就不要在你的配置文件里再次定义同名的 appender(比如叫 CONSOLE 或 FILE)了,否则会导致日志被重复打印或者启动时抛出 Logback 的重名警告。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。