Spring Boot 关闭 “七七八八” 日志的完整教程

Spring Boot 默认使用 SLF4J 门面 + Logback 实现 作为日志体系,偶尔也会引入 Log4j2 替代 Logback。本教程从全局调整、局部关闭、极端场景、第三方冲突四个维度,覆盖所有 “不想看的日志” 场景,新手可直接按步骤操作。


一、前置说明:Spring Boot 日志的核心逻辑

Spring Boot 日志的 “开关 / 级别” 主要通过 application.yml/application.properties 配置,核心规则:

  1. 日志级别优先级(从高到低,高的会覆盖低的):OFF(完全关闭)> ERROR > WARN > INFO(默认全局级别)> DEBUG > TRACE
  2. 门面与实现的关系:所有日志通过 SLF4J 统一调用,实际输出由 Logback/Log4j2 控制,关闭时优先改 SLF4J 门面的配置(兼容所有实现)

二、核心场景 1:全局日志级别调整(最常用,一键降 / 关)

如果只是觉得默认的 INFO 级日志太杂,直接把全局级别调为 WARN/ERROR/OFF 即可:

配置方式(二选一,推荐 YAML)

1. application.yml(更清晰,层级分明)
logging:
  level:
    root: WARN  # 全局日志级别:OFF/ERROR/WARN/INFO/DEBUG/TRACE
2. application.properties
logging.level.root=WARN

三、核心场景 2:指定包 / 类的日志关闭(精准打击,只关没用的)

如果全局调级别会影响自己的业务日志,只关第三方依赖(MyBatis、Redis、Spring Security、第三方 SDK)或特定包的日志即可:

配置示例(YAML 为主,Properties 同理)

logging:
  level:
    # 1. 自己的业务包:保留 INFO(方便调试)
    com.yourcompany.yourproject: INFO
    # 2. 关闭 MyBatis 所有日志(SQL、参数、结果集)
    org.mybatis: OFF
    org.apache.ibatis: OFF
    # 3. 关闭 Redis 连接池/操作日志
    org.springframework.data.redis: OFF
    io.lettuce.core: OFF  # Lettuce 是 Spring Boot 默认 Redis 客户端
    # 4. 关闭 Spring Security 认证/授权日志
    org.springframework.security: OFF
    # 5. 关闭 Spring Boot 启动时的自动配置日志(可选,新手不建议)
    org.springframework.boot.autoconfigure: OFF
    # 6. 关闭特定类的日志(比如某个第三方工具类太吵)
    com.thirdparty.sdk.utils.NoisyUtil: OFF

四、核心场景 3:控制台彩色日志关闭(可选,嫌晃眼)

Spring Boot 默认控制台日志是彩色的,有些用户 / 环境(比如纯文本终端)不需要:

配置方式

logging:
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"  # 去掉彩色标记
  # 或者直接禁用彩色(更简单)
  spring:
    output:
      ansi:
        enabled: NEVER  # 可选值:ALWAYS(强制彩色)/NEVER(强制关闭)/DETECT(自动检测,默认)

五、核心场景 4:极端场景(只留一种日志)

1. 完全关闭控制台日志,只留文件日志

logging:
  # 配置文件日志(路径、文件名、大小、保留天数)
  file:
    name: /var/log/your-project.log  # 日志文件路径(Windows 用 D:/logs/your-project.log)
  pattern:
    console: ""  # 清空控制台日志格式,相当于关闭
  # 可选:文件日志的滚动策略(避免文件过大)
  logback:
    rollingpolicy:
      max-file-size: 10MB  # 单个日志文件最大 10MB
      max-history: 30  # 保留 30 天的日志
      total-size-cap: 1GB  # 所有日志文件总大小不超过 1GB

2. 完全关闭文件日志,只留控制台日志

yaml

logging:
  file:
    name: ""  # 清空日志文件名,相当于关闭文件日志

六、核心场景 5:第三方依赖自带的冗余 / 冲突日志关闭

很多第三方 SDK 会自带旧版日志门面(commons-logging、log4j1.x),导致日志重复输出或冲突,需排除旧版桥接包,统一用 SLF4J + Logback/Log4j2

1. 排查冲突(先看依赖树)

在项目根目录执行 Maven/Gradle 命令,查看依赖树:

Maven
mvn dependency:tree
Gradle
./gradlew dependencies

2. 排除旧版桥接包(Maven 为主,Gradle 同理)

常见需要排除的旧版包
  • commons-logging(Apache 旧版门面)
  • log4j(Log4j1.x 旧版实现)
  • slf4j-log4j12(SLF4J 到 Log4j1.x 的桥接包)
Maven 排除示例(在 pom.xml 的依赖中添加 exclusions
<!-- 比如排除 Spring Boot Starter Web 自带的 commons-logging(虽然默认已经排除,但有些第三方 SDK 会带) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- 排除 commons-logging -->
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
        <!-- 排除 Log4j1.x 相关 -->
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

七、补充:如果用 Log4j2 替代 Logback,怎么关闭?

如果项目已经引入了 spring-boot-starter-log4j2 替代默认的 Logback,配置方式完全一样,都是通过 application.yml/application.properties 调整 SLF4J 门面的级别,无需改 Log4j2 的配置文件(除非需要更复杂的滚动策略)。


八、总结:新手快速上手的 3 步

  1. 第一步:全局调级别为 WARN,先把大部分杂日志关了;
  2. 第二步:如果自己的业务日志需要 INFO,单独把业务包的级别设为 INFO
  3. 第三步:如果还有特定第三方 SDK 太吵,单独把该 SDK 的包设为 OFF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值