目录
[日志级别基础 + Spring Boot 日志实践指南](#日志级别基础 + Spring Boot 日志实践指南)
[1️⃣ TRACE(追踪)](#1️⃣ TRACE(追踪))
[2️⃣ DEBUG(调试)](#2️⃣ DEBUG(调试))
[3️⃣ INFO(信息)](#3️⃣ INFO(信息))
[4️⃣ WARN(警告)](#4️⃣ WARN(警告))
[5️⃣ ERROR(错误)](#5️⃣ ERROR(错误))
[6️⃣ FATAL / CRITICAL(严重错误)](#6️⃣ FATAL / CRITICAL(严重错误))
[Logback / Log4j / SLF4J](#Logback / Log4j / SLF4J)
[Java 标准日志](#Java 标准日志)
[Python logging](#Python logging)
[✅ 正确示例](#✅ 正确示例)
[❌ 错误示例](#❌ 错误示例)
[第二部分:Spring Boot 日志配置与实践](#第二部分:Spring Boot 日志配置与实践)
[一、Spring Boot 默认日志体系](#一、Spring Boot 默认日志体系)
[二、application.yml 简单配置](#二、application.yml 简单配置)
[三、logback-spring.xml 推荐配置](#三、logback-spring.xml 推荐配置)
[✅ 推荐:@Slf4j](#✅ 推荐:@Slf4j)
[✅ 备选:LoggerFactory](#✅ 备选:LoggerFactory)
我们采用**"先理论、后实践"**的结构:
先补充日志级别的基础知识,再接Spring Boot 日志配置与使用流程。
日志级别基础 + Spring Boot 日志实践指南
第一部分:日志级别基础知识
一、什么是日志级别?
日志级别用于表示:
- 日志的重要程度
- 日志的详细程度
- 当前日志是否需要输出
- 出现问题时需要关注的紧急程度
通过设置日志级别,可以:
✅ 开发时看到更多调试信息
✅ 生产环境只保留重要日志
✅ 快速定位问题
✅ 避免日志过多影响性能
二、日志级别从低到高
常见日志级别如下:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
| 级别 | 名称 | 严重程度 | 是否默认输出 | 使用场景 |
|---|---|---|---|---|
TRACE |
追踪 | 最低 | 否 | 最详细的运行过程 |
DEBUG |
调试 | 低 | 通常否 | 开发调试 |
INFO |
信息 | 中 | 是 | 正常运行信息 |
WARN |
警告 | 较高 | 是 | 潜在风险 |
ERROR |
错误 | 高 | 是 | 功能执行失败 |
FATAL |
严重错误 | 最高 | 是 | 系统即将崩溃 |
部分日志框架使用
CRITICAL,含义与FATAL类似。
三、日志级别过滤规则
假设设置日志级别为 INFO:
TRACE ❌ 不输出
DEBUG ❌ 不输出
INFO ✅ 输出
WARN ✅ 输出
ERROR ✅ 输出
FATAL ✅ 输出
如果设置日志级别为 ERROR:
INFO ❌ 不输出
WARN ❌ 不输出
ERROR ✅ 输出
FATAL ✅ 输出
✅ 规律:只有等于或高于设置级别的日志才会输出。
四、各级别详细说明
1️⃣ TRACE(追踪)
最详细的日志,一般用于:
-
方法进入和退出
-
每一步变量变化
-
复杂业务执行过程
TRACE 进入 calculate() 方法,参数 a=1, b=2
TRACE calculate() 方法执行结束,返回值=3
⚠️ 生产环境一般关闭。
2️⃣ DEBUG(调试)
用于开发和排查问题:
DEBUG 用户查询参数:userId=1001
DEBUG SQL 执行耗时:120ms
适用环境:
- 本地开发
- 测试环境
- 临时线上排查
3️⃣ INFO(信息)
记录系统正常运行中的关键节点:
INFO 应用启动完成
INFO 用户登录成功:userId=1001
INFO 订单创建成功:orderId=ORD123
✅ 生产环境默认级别
4️⃣ WARN(警告)
表示存在潜在风险,但不影响程序继续运行:
WARN 库存不足,当前库存=2,请求数量=5
WARN 接口响应较慢,耗时=3200ms
WARN 使用了即将废弃的接口
5️⃣ ERROR(错误)
表示某个功能执行失败:
ERROR 订单创建失败,userId=1001,原因=数据库连接超时
ERROR 支付回调处理失败,orderId=ORD123
通常:
- 需要开发人员介入
- 需要记录异常堆栈
- 需要监控和告警
6️⃣ FATAL / CRITICAL(严重错误)
表示系统可能无法继续运行:
FATAL 数据库连接池耗尽,应用无法继续处理请求
FATAL 核心配置文件缺失,程序即将退出
五、不同日志框架级别对照
Logback / Log4j / SLF4J
OFF
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ALL
Java 标准日志
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST
OFF
Python logging
CRITICAL
ERROR
WARNING
INFO
DEBUG
六、日志级别使用建议
本地开发:DEBUG
测试环境:DEBUG / INFO
生产环境:INFO
紧急排查:临时 DEBUG
长期运行:不要开启 TRACE
七、日志级别最佳实践
✅ 正确示例
INFO 用户下单成功,orderId=ORD123
WARN 库存不足,剩余库存=2
ERROR 订单创建失败,orderId=ORD123
❌ 错误示例
INFO 进入方法
INFO 退出方法
ERROR 操作失败
第二部分:Spring Boot 日志配置与实践
一、Spring Boot 默认日志体系
Spring Boot 默认使用:
SLF4J(日志门面)
+
Logback(日志实现)
项目通常已经包含:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
日志依赖由:
spring-boot-starter-logging
自动引入。
二、application.yml 简单配置
logging:
level:
root: INFO
org.springframework: WARN
com.example.demo: DEBUG
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n"
file:
name: logs/app.log
配置说明
| 配置项 | 作用 |
|---|---|
logging.level.root |
全局日志级别 |
com.example.demo |
指定包日志级别 |
pattern.console |
控制台日志格式 |
file.name |
日志文件路径 |
三、logback-spring.xml 推荐配置
路径:
src/main/resources/logback-spring.xml
完整配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
<!-- 控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 开发环境 -->
<springProfile name="dev">
<logger name="com.example.demo" level="DEBUG"/>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<logger name="com.example.demo" level="INFO"/>
</springProfile>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
四、代码中使用日志
✅ 推荐:@Slf4j
@Slf4j
@Service
public class OrderService {
public void createOrder(Long userId, String orderId) {
log.info("开始创建订单,userId={}, orderId={}", userId, orderId);
try {
// 业务代码
} catch (Exception e) {
log.error("订单创建失败,userId={}, orderId={}", userId, orderId, e);
throw e;
}
}
}
✅ 备选:LoggerFactory
@Service
public class OrderService {
private static final Logger logger =
LoggerFactory.getLogger(OrderService.class);
public void createOrder(Long userId, String orderId) {
logger.info("开始创建订单,userId={}, orderId={}", userId, orderId);
}
}
两者关系
@Slf4j会在编译时自动生成LoggerFactory.getLogger(),本质完全相同。
五、多环境日志级别
application-dev.yml
logging:
level:
com.example.demo: DEBUG
application-prod.yml
logging:
level:
com.example.demo: INFO
启动指定环境
java -jar app.jar --spring.profiles.active=prod
六、完整流程总结
1️⃣ 理解日志级别
- TRACE / DEBUG / INFO / WARN / ERROR / FATAL
2️⃣ 确认日志依赖
- spring-boot-starter-logging(默认已有)
- lombok(使用 @Slf4j 时)
3️⃣ application.yml
- 控制台
- 文件
- 日志级别
4️⃣ logback-spring.xml
- 控制台 + 文件
- 日志切割
- 多环境
5️⃣ 代码实现
- 推荐:@Slf4j
- 备选:LoggerFactory.getLogger()
6️⃣ 环境日志级别
- dev:DEBUG
- prod:INFO
七、最终推荐方案
Spring Boot 项目日志标准实践:
- 使用 Logback
- 配置
logback-spring.xml- 控制台 + 文件输出
- 按天切割日志
- 开发环境 DEBUG
- 生产环境 INFO
- 代码使用
@Slf4j