日志级别基础 + 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
相关推荐
啵啵啵鱼1 小时前
第二章 线性表
java·数据结构·算法
ab1237681 小时前
Spring WebSocket(STOMP)
笔记·websocket·springboot·stomp
深入云栈1 小时前
Netty 4.2.x 源码深度解析 (十九):ChannelPool 连接池 —— 连接复用与资源管理
java·后端·架构
野生数据人1 小时前
ES DSL 转 SQL 速查表:20 条子句对照 + 一条能直接跑的改写示例
大数据·数据库
野生数据人1 小时前
采集链路改投 Doris 速查手册:三条路径对照、output 配置项清单、报错处理表
大数据·数据库
用户094248568031 小时前
第38章:从零构建JVM稳定性平台最小闭环
java·jvm
Zhuo1Joy1 小时前
压测全绿的假象:0% 错误率的系统与 17.2% 成功率的业务
java
云飞云共享云桌面1 小时前
钣金精密机械工厂:多工程师共享图形服务器,SolidWorks/UG 三维设计兼顾成本与数据安全
运维·服务器·人工智能·自动化·制造
救救孩子把1 小时前
AI面试八股文-07_6-向量数据库索引详解
数据库·人工智能·面试·向量数据库·hnsw