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_PATTERNFILE_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.logcom.b 输出 b.log)、想使用复杂的按大小+时间滚动策略、想把日志推送到 ELK (Logstash) 或者 Kafka、想在日志中加上 Local的 PID 等复杂逻辑。
    👉 必须使用 logback-spring.xml,写在 yml 里的配置主要是为了传入参数(比如路径、开关),核心逻辑由 logback-spring.xml 接管。

posted @ 2026-07-23 17:06  dirgo  阅读(0)  评论(0)    收藏  举报