Spring Boot 日志体系如何组成?logback 分级输出与生产配置怎么做?

结论先行:Spring Boot 通过 spring-boot-starter-logging 默认集成 SLF4J + Logback,应用中一律用 SLF4J API 编程,实现可无痛切换。日常开发用 logging.level.* 按包调级别,生产用 logback-spring.xml 定制格式、滚动与按环境输出。

一、日志体系组成

代表职责
门面 APISLF4J应用代码只依赖它
实现Logback(默认)/ Log4j2真正写日志
桥接log4j-to-slf4j 等让第三方库日志统一走 SLF4J
private static final Logger log = LoggerFactory.getLogger(DemoService.class);
log.info("订单创建 id={}", orderId); // 占位符,避免字符串拼接

换 Log4j2:排除 spring-boot-starter-logging,引入 spring-boot-starter-log4j2。

二、快速分级配置

logging:
  level:
    root: info              # 全局级别
    com.example.order: debug # 局部更细
    org.springframework.web: warn
  pattern:
    console: "%d{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n"
  file:
    name: logs/app.log      # 输出到文件(可选)
  • 级别从低到高:trace < debug < info < warn < error;调低包级别可查 SQL/参数(配合 mybatis 等);
  • 编程式临时调级:Actuator loggers 端点(POST 修改运行中级别的调试神器)。

三、logback-spring.xml 生产要点

  • 用 logback-spring.xml 而非 logback.xml,才能用 Spring 扩展标签;
  • 滚动策略:SizeAndTimeBasedRollingPolicy 按天/大小切分 + 保留天数,防止单文件无限增长;
  • 按环境区分输出:<springProfile name="prod"> 里开文件/告警输出,dev 只打控制台;
  • 建议给 traceId/spanId 预留 MDC 占位(链路追踪时打印 %X{traceId});
  • 打印堆栈与业务上下文并用,错误日志要包含关键参数,避免“只看得到异常看不到数据”。

常见追问 / 记忆点

  • 追问:应用里能不能直接用 Logback 类?答:不推荐,用 SLF4J API,避免锁定实现。
  • 追问:线上要临时看 debug 日志怎么办?答:Actuator loggers 端点动态调级,用后还原,无需重启。
  • 记忆点:编码用 SLF4J、调级用 yml、精细用 logback-spring.xml;滚动 + 分级 + MDC 是生产三件套。
笔记加载中…