Spring Boot 使用 SLF4J 进行日志记录

简介: 本课讲解Java开发中日志的最佳实践,摒弃System.out.println(),采用SLF4J+Logback方案。涵盖日志级别、配置文件编写、格式化输出与滚动策略,提升系统可观测性与维护效率。

在 Java 开发中,我们常常看到初学者使用 System.out.println() 打印调试信息。虽然简单直接,但这种方式存在严重问题:

  • ❌ 无法控制输出级别(如只看错误日志);
  • ❌ 无法将日志写入文件;
  • ❌ 性能差,大量输出会拖慢应用;
  • ❌ 无法格式化、归档、轮转。

✅ 正确做法是:使用专业的日志框架。在 Spring Boot 项目中,SLF4J + Logback 是官方推荐、性能优异、功能强大的组合。

本节课将带你掌握:

  • 什么是 SLF4J 及其优势;
  • 如何在 Spring Boot 中配置日志;
  • 编写 logback.xml 实现日志分级、文件滚动、格式定制;
  • 在代码中正确使用 Logger 打印日志。

1. 为什么选择 SLF4J?

1.1 SLF4J 是什么?

SLF4J(Simple Logging Facade for Java) 是一个日志门面(Facade),它不负责实际的日志输出,而是提供统一的 API 接口,背后可以对接 Logback、Log4j、java.util.logging 等具体实现。

就像 JDBC 是数据库访问的门面一样,SLF4J 是日志系统的“通用接口”。

1.2 核心优势

优势 说明
解耦日志实现 切换日志框架(如从 Log4j 换成 Logback)只需改依赖,无需修改代码
占位符支持 logger.info("用户 {} 登录成功", username),避免字符串拼接开销
级别判断优化 自动判断日志级别是否启用,避免无谓的对象创建
阿里规约强制要求 《阿里巴巴 Java 开发手册》明确要求:禁止直接使用 Log4j/Logback API,必须通过 SLF4J

📌 结论SLF4J 是企业级项目的标准选择


2. 在代码中使用 Logger

使用方式非常简单:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/test")
public class TestController {
    // 1. 获取 Logger 实例(类名作为 logger 名)
    private static final Logger logger = LoggerFactory.getLogger(TestController.class);
    @GetMapping("/log")
    public String testLog() {
        // 2. 按不同级别打印日志
        logger.debug("调试信息:用户正在访问 /log");
        logger.info("普通信息:请求已接收");
        logger.warn("警告信息:参数可能不完整");
        logger.error("错误信息:数据库连接失败");
        // 3. 使用占位符(推荐!避免字符串拼接)
        String blog1 = "blog.itcodai.com";
        String blog2 = "blog.csdn.net/eson_15";
        logger.info("倪升武的博客:{};CSDN:{}", blog1, blog2);
        return "success";
    }
}

💡 最佳实践

  • Logger 声明为 private static final
  • 使用 {} 占位符,不要用 + 拼接字符串
  • 生产环境通常关闭 DEBUG 日志,避免性能损耗。

3. Spring Boot 中的日志配置

Spring Boot 默认集成 SLF4J + Logback,无需额外引入依赖。

3.1 配置方式:application.yml

logging:
  # 指定自定义 logback 配置文件(可选)
  config: classpath:logback.xml
  # 设置特定包的日志级别(常用于开启 SQL 日志)
  level:
    com.itcodai.course03.dao: trace
    com.itcodai.course03.service: debug

🔍 说明:

  • logging.config:指向自定义的 logback.xml
  • logging.level:可快速覆盖某些包的日志级别,优先级高于 logback.xml

3.2 日志级别(从高到低)

级别 用途
ERROR 系统错误、异常
WARN 警告,不影响主流程
INFO 重要业务日志(如启动完成、用户登录)
DEBUG 调试信息(开发阶段使用)
TRACE 更细粒度(如 MyBatis 的 SQL 日志)

生产建议:全局设为 INFO,关键模块可临时调为 DEBUG


4. logback.xml 详解(核心配置文件)

当需要精细控制日志行为时,需编写 logback.xml(放在 src/main/resources 下)。

完整示例:logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 1. 定义日志格式和文件路径 -->
    <property name="LOG_PATTERN" 
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <property name="LOG_PATH" value="D:/logs/course03"/> <!-- Windows 路径 -->
    <!-- Linux 示例:<property name="LOG_PATH" value="/var/logs/myapp"/> -->
    <!-- 2. 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 3. 文件输出(按天+大小滚动) -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件命名规则 -->
            <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 单个文件最大 100MB -->
            <maxFileSize>100MB</maxFileSize>
            <!-- 保留 30 天日志 -->
            <maxHistory>30</maxHistory>
            <!-- 总日志大小不超过 10GB -->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 4. 日志级别与输出目标 -->
    <logger name="com.itcodai.course03" level="INFO" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>
    <!-- 5. 根日志器(兜底) -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

关键配置说明

配置项 作用
<property> 定义可复用的变量(如格式、路径)
<appender> 定义日志输出目的地(控制台、文件等)
RollingFileAppender 支持日志滚动(按时间/大小切分)
SizeAndTimeBasedRollingPolicy 同时按天和文件大小滚动
<logger> 为特定包设置独立日志级别和输出方式
additivity="false" 禁止日志向上级(root)重复输出

⚠️ 注意

  • 路径必须是绝对路径(Windows 用 /\\);
  • %i 是文件索引,当日志达到 maxFileSize 时自动生成 app.2025-12-29.0.log, app.2025-12-29.1.log...

5. 测试日志输出

启动项目,访问:

http://localhost:8080/test/log

控制台输出(INFO 级别)

2025-12-29 20:30:15.123 [http-nio-8080-exec-1] INFO  c.i.c.TestController - ======测试日志info级别打印=====
2025-12-29 20:30:15.124 [http-nio-8080-exec-1] ERROR c.i.c.TestController - =====测试日志error级别打印====
2025-12-29 20:30:15.125 [http-nio-8080-exec-1] WARN  c.i.c.TestController - ======测试日志warn级别打印=====
2025-12-29 20:30:15.126 [http-nio-8080-exec-1] INFO  c.i.c.TestController - ======倪升武的个人博客:blog.itcodai.com;倪升武的CSDN博客:blog.csdn.net/eson_15

🔍 注意:DEBUG 日志未输出,因为当前级别为 INFO

同时,可在 D:/logs/course03/ 目录下看到生成的日志文件。


6. 总结与最佳实践

项目 建议
日志框架 ✅ 使用 SLF4J + Logback(Spring Boot 默认)
代码写法 LoggerFactory.getLogger(类名.class) + {} 占位符
日志级别 开发:DEBUG;生产:INFOWARN
日志文件 ✅ 按天+大小滚动,保留 7~30 天
敏感信息 ❌ 禁止记录密码、身份证、手机号等
异常日志 ✅ 使用 logger.error("消息", exception) 记录堆栈

🎯 记住日志是系统的眼睛。良好的日志设计,能让故障排查效率提升 10 倍!

相关文章
|
24天前
|
存储 Java API
Spring Boot使用slf4j进行日志记录
本文介绍了在Spring Boot项目中使用SLF4J结合Logback进行日志管理的方法。通过配置`application.yml`和`logback.xml`,实现日志级别、输出格式、文件存储与滚动策略的灵活控制,并推荐使用SLF4J门面模式替代直接调用具体日志实现,提升系统可维护性与扩展性。
|
26天前
|
存储 SQL 监控
SpringBoot- 整合Logback,滚动记录+多文件
`logback-spring.xml` 是 Spring Boot 项目中的日志配置文件,用于定义日志输出格式、级别及存储路径。支持控制台与文件双输出,按时间滚动日志,并分类记录如 SQL、错误、请求参数等信息,便于问题排查与系统监控。
|
存储 Java 数据库连接
MyBatis-Plus 基础操作指南:实现高效的增删改查
MyBatis-Plus 基础操作指南:实现高效的增删改查
925 0
|
安全 Java Spring
Spring Boot 过滤器(Filter)详解
本文详解Spring Boot中过滤器的原理与实践,涵盖Filter接口、执行流程、@Component与FilterRegistrationBean两种实现方式、执行顺序控制及典型应用场景如日志记录、权限验证。对比拦截器,突出其在Servlet容器层的通用性与灵活性,助力构建高效稳定的Web应用。
4409 0
|
26天前
|
监控 前端开发 Java
Spring Boot 统一异常处理与全局响应增强
本文介绍如何在Spring Boot中实现全局异常处理,通过`@RestControllerAdvice`和自定义`BusinessException`统一拦截异常,结合`JsonResult`标准化响应格式,避免信息泄露,提升前后端协作效率与系统健壮性。
|
6月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
1207 5
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
436 1
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
1569 2
|
XML Java Maven
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息
这篇文章详细介绍了如何在Spring Boot项目中使用logback进行日志记录,包括Maven依赖配置、logback配置文件的编写,以及实现的日志持久化和控制台输出效果。
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息
|
数据采集 监控 Java
Spring Boot日志
Spring Boot日志
452 3

热门文章

最新文章