application.yml中Logback相关配置
[AI生成]
在 Spring Boot 中,application.yml(或 application.properties)提供了非常强大的日志配置能力。
重点在于:application.yml 中的配置,最终会被注入到 Logback 的 defaults.xml 里那些 ${} 变量中。
也就是说,如果你在 yml 里改了配置,就等于改变了 defaults.xml 里定义好的默认格式。
下面详细介绍 application.yml 中与日志相关的配置,分为几个常用模块。
1. 基础日志级别控制
这是最常用的配置,用于控制哪些包打印什么级别的日志。
logging:
# 全局根日志级别
level:
root: INFO
# 针对特定包/类设置级别 (优先级高于 root)
com.example.demo: DEBUG
# 只有特定包下的某些类
com.example.demo.service.UserServiceImpl: TRACE
# 关闭某些烦人的框架日志
org.springframework: WARN
org.hibernate.SQL: DEBUG # 常用于开发环境打印执行的 SQL 语句
2. 日志文件输出控制
如果你只是想把日志输出到文件,并且让它自动按天滚动、自动清理,你甚至不需要写 logback-spring.xml,只在 yml 里配置即可(Spring Boot 底层会自动生成 RollingFileAppender)。
logging:
file:
# 日志文件名 (如果只配 name,不配 path,文件会生成在项目根目录)
# name: myapp.log
# 日志文件存放路径 (推荐使用绝对路径或相对路径)
path: ./logs
# 单个日志文件最大大小 (超过则触发文件切割滚动),默认 10MB
max-size: 50MB
# 保留的日志文件天数 (最大历史归档),默认 7天
max-history: 30
# 所有日志文件的总大小上限,超过自动清理最老文件,默认 0 (不限制)
total-size-cap: 10GB
# 历史归档日志的文件名格式 (默认支持 %d 日期和 %i 大小序号)
clean-history-on-start: false # 项目启动时是否清理历史日志,默认 false
3. 修改默认输出格式 (重点)
在这里配置的格式,会强制覆盖 defaults.xml 中定义的 CONSOLE_LOG_PATTERN 或 FILE_LOG_PATTERN。
logging:
pattern:
# 修改控制台输出格式
# 注意:如果你引入了 defaults.xml,你依然可以使用 %clr 来上色,如果不引入,%clr 会报错
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
# 修改文件输出格式 (文件里一般不要带颜色控制符,否则查看时会有乱码 [32m 等)
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
# 单独修改日期格式 (只改时间那一节的样式)
dateformat: "yyyy-MM-dd HH:mm:ss.SSS"
4. 多环境配置 (Profiles)
这是 Spring Boot 结合 Logback 最强大的功能之一。你可以在 application.yml 中激活不同的环境,然后在自定义的 logback-spring.xml 中用 <springProfile> 区分。
application.yml:
spring:
profiles:
active: dev # 当前激活 dev 环境
logback-spring.xml 中可以这么写(会根据 yml 激活的环境生效):
<!-- 开发环境:只输出到控制台,打印 DEBUG 级别 -->
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!-- 生产环境:输出到文件,只打印 INFO 级别 -->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</springProfile>
5. 在 YAML 中自定义变量并传递给 Logback
如果你觉得 yml 里的配置还不够灵活,想在 yml 里定义自己的业务变量,然后交给 logback-spring.xml 读取,可以使用 <springProperty>。
application.yml:
logging:
# 自定义一个命名空间
custom:
app-name: "MyAwesomeApp"
log-path: "/var/logs/myapp"
logback-spring.xml:
<configuration>
<!-- 引入默认规则 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 从 yml 的 logging.custom 命名空间读取变量 -->
<springProperty scope="context" name="APP_NAME" source="logging.custom.app-name"/>
<springProperty scope="context" name="CUSTOM_LOG_PATH" source="logging.custom.log-path"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 使用读到的 yml 变量拼装路径 -->
<file>${CUSTOM_LOG_PATH}/${APP_NAME}.log</file>
<!-- 省略其他配置... -->
</appender>
</configuration>
总结:到底用 yml 还是 logback-spring.xml?
-
如果你只需要控制:日志级别、日志文件路径/大小/切割天数、简单修改控制台格式。
👉 不需要建logback-spring.xml,直接在application.yml里配即可,Spring Boot 会自动帮你搞定。 -
如果你需要复杂的配置:比如想给不同的业务包输出到不同的文件里(
com.a输出a.log,com.b输出b.log)、想使用复杂的按大小+时间滚动策略、想把日志推送到 ELK (Logstash) 或者 Kafka、想在日志中加上 Local的 PID 等复杂逻辑。
👉 必须使用logback-spring.xml,写在yml里的配置主要是为了传入参数(比如路径、开关),核心逻辑由logback-spring.xml接管。

浙公网安备 33010602011771号