Spring Boot 默认使用 SLF4J 门面 + Logback 实现 作为日志体系,偶尔也会引入 Log4j2 替代 Logback。本教程从全局调整、局部关闭、极端场景、第三方冲突四个维度,覆盖所有 “不想看的日志” 场景,新手可直接按步骤操作。
一、前置说明:Spring Boot 日志的核心逻辑
Spring Boot 日志的 “开关 / 级别” 主要通过 application.yml/application.properties 配置,核心规则:
- 日志级别优先级(从高到低,高的会覆盖低的):
OFF(完全关闭)>ERROR>WARN>INFO(默认全局级别)>DEBUG>TRACE - 门面与实现的关系:所有日志通过 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 步
- 第一步:全局调级别为
WARN,先把大部分杂日志关了; - 第二步:如果自己的业务日志需要
INFO,单独把业务包的级别设为INFO; - 第三步:如果还有特定第三方 SDK 太吵,单独把该 SDK 的包设为
OFF。

859

被折叠的 条评论
为什么被折叠?



