日志级别基础 + Spring Boot 日志实践指南

目录

[日志级别基础 + 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)

两者关系

五、多环境日志级别

application-dev.yml

application-prod.yml

启动指定环境

六、完整流程总结

七、最终推荐方案

我们采用**"先理论、后实践"**的结构:

先补充日志级别的基础知识,再接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
相关推荐
AOI小白新手上路6 小时前
深度学习算力购置方案分析:本地 RTX 4090 服务器 vs 云端租赁
服务器·人工智能·深度学习
VimorphTech6 小时前
每批开 4 个线程,为什么限制不住 TTS 的总并发?
java·spring boot·spring
Thanks_ks6 小时前
MySQL 的 REPEATABLE READ 到底能不能防幻读——从快照读、当前读到 Next-Key Lock
数据库·mysql·innodb·mvcc·锁机制·事务隔离级别·间隙锁
Pniubi6 小时前
Java为什么要分堆和栈
java·开发语言
杨凯凡6 小时前
Spring Boot 缓存一致性怎么保证?@Cacheable、@CacheEvict 与事务提交时机实战
java·spring boot·spring cache·后端开发·缓存一致性
千桐科技6 小时前
qKnow智能体构建平台专业版 v3.1.5 发布:扩容工作流编排调用能力,上线Text2SQL插件,拓宽数据类智能应用构建边界
服务器·数据库·oracle·qknow
宇灬宇6 小时前
oracle直方图测试
数据库·oracle
雪落漂泊6 小时前
Linux进程(四)概念:命令行参数和环境变量篇
linux·运维·服务器
NextTech_6 小时前
不想学 vim,怎么改服务器上的配置文件?
服务器·编辑器·vim