当前位置: 首页 > news >正文

Spring Boot 内置日志框架 Logback - 以及 lombok 介绍 - 教程

SpringBoot支持多种日志框架,包括 Logback、Log4j2 和 Java Util Logging(JUL)。默认情况下,如果你使用SpringBoot 的 starters 启动器,它将使用 Logback 作为日志框架。

本文重点介绍 spring boot 默认的日志框架 Logback 、SLF4J 依赖、Lombok 依赖

日志的核心自然是日志框架。

日志框架对比:

特性 / 框架LogbackLog4j2JUL (java.util.logging)
官方支持官方推荐Apache 官方Java 内置
性能高,异步性能更好中等
配置方式XML / GroovyXML / JSON / YAMLproperties / API
Spring Boot 默认✅ 内置❌ 需要排除默认依赖再添加❌ 可以替换,但不方便
特性滚动策略丰富、异步支持、Spring Boot 支持日志级别动态调整更强大、异步性能好、多线程优化简单、易用但功能有限
学习成本低-中

Spring Boot 的内置日志实现是由 SLF4J + Logback 框架实现, Lombok 仅仅是一个辅助。

先学习 SLF4J

SLF4J 介绍

SLF4J 是一个 日志门面(Facade), 它提供 统一的日志 API,解耦日志框架实现 , 你用 SLF4J 写日志时,不用关心底层具体用的是 Logback、Log4j2、JUL(Java Util Logging)还是其他实现,统一使用门面类:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger log = LoggerFactory.getLogger(MyApp.class);

这也是 Spring boot 的starter 默认集成的依赖,如图,我们就不用手动集成这个依赖了。

img

SLF4J 仅仅是一个门面类,没有具体实现,统一了API的调用。

日志的具体能力由 Logback 框架提供,接下来学习。

Logback 日志框架介绍

Logback 是一个 Java 日志框架,由 Log4j 的作者 Ceki Gülcü 开发,是 Log4j 的“继任者”, 在 Spring Boot 里,Logback 是 默认日志实现,通过 spring-boot-starter-logging 自动引入。

一般来说,无论是 Logback , Log4j2 还是其他框架,主要都提供三个重要的功能,记录日志,日志级别,日志输出。

1、日志记录

  • 提供一套统一的 API 来打印日志(trace/debug/info/warn/error)。

2、日志级别控制

  • 根据配置决定哪些日志需要打印、哪些忽略。
  • 典型例子:生产环境只打印 WARN 及以上,开发环境允许 DEBUG

3、日志路由与输出

  • 日志输出到哪里:控制台、文件、数据库、网络、异步队列……
  • 日志格式如何定义:时间戳、线程名、日志级别、MDC 上下文。
  • 这部分就是“日志落地”的关键。

我们来看看 Logback 框架的三大核心模块:

  1. logback-core:基础模块(其他两个的依赖)
  2. logback-classic:完整实现 SLF4J 的日志框架(Spring Boot 默认使用它)
  3. logback-access:与 Servlet 容器集成,记录 HTTP 访问日志

上面所说的日志三个基本功能:记录日志,日志级别,日志输出,这三个功能仅需一个 logback-classic 模块和logback.xml配置就能实现,不过它 依赖 logback-core 来完成底层实现(Appender、Layout、Filter 这些东西在 core 里) ,logback-access 只是加一个“web access log”的功能,不是大多数项目必须的。

作为使用者,我们要知道 SLF4J 门面类的API, 即可使用日志功能,知道了底层是 logback 依赖库,便可以更换别的依赖库,体验其他库的功能。

日志级别

级别从高到低, 生产环境通常只打印 WARN 及以上

ERROR  >  WARN  >  INFO  >  DEBUG  >  TRACE

TRACE(ALL):最详细的日志,用来跟踪程序的每一步执行,基本只在本地排查 bug 用。
DEBUG:用于调试信息,通常用于开发和调试阶段。
INFO:提供程序运行时的重要信息,用于指示应用程序正常运行。
WARN:表示潜在的问题,不会导致应用程序失败,但可能需要关注。
ERROR:表示错误事件,可能导致应用程序出现问题。
OFF:关闭日志。

实践 logback 框架

创建一个springboot项目,什么依赖都不用引入,如图,默认有 logback 依赖

img

创建一个包 controller,包下创建 UserController 类,实现 CommandLineRunner,作用模拟调用 getUser() 接口, 会在 Spring 容器启动完成之后,马上执行CommandLineRunner.run() 方法。

package com.codebear.springboothelloword.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class UserController implements CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
@Override
public void run(String... args) throws Exception {
getUser();
log.error("一条 error 日志");
log.warn("一条 warn 日志");
log.info("一条 info 日志");
log.debug("一条 debug 日志");
log.trace("一条 trace 日志");
}
public static String getUser() {
log.info("getUser方法执行");
return "hello world";
}
}

启动就能看到日志输出在控制台

img

如果想要修改日志级别,使用 Spring boot 配置文件修改

logging:
level:
root: WARN              # 全局日志级别,默认是 INFO
com.codebear.springboothelloword.controller: WARN # 指定包的日志级别

测试输出仅有两条日志:

img

实践发现,默认的日志框架需要创建一个 Logger 对象,有点麻烦,开发中经常引用一个 lombok 依赖,配合 @Slf4j注解更方便使用日志功能。

介绍 Lombok

Lombok 是一个 编译时代码生成工具,它本身不实现日志功能,不依赖 Logback。作用是提供注解 @Slf4j@Log4j2,注解帮你自动生成日志对象(Logger 变量),避免手动创建 Logger 对象。

另外

这是一个编译时代码生成工具,意思是在编译期会生成代码到 .class 文件中, 生成后的字节码和手写代码效果完全一致 , 所以最终.class 文件包含了 Logger 对象的代码,@Data 等注解也是生成代码,所以在打 jar 包时,可以不需要把 lombok 打入jar 包。

lombok 提供的注解有:

注解功能举例
@Getter / @Setter自动生成 getter/setter 方法@Getter @Setter private String name;
@ToString自动生成 toString() 方法@ToString
@EqualsAndHashCode自动生成 equals()hashCode()@EqualsAndHashCode
@NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor自动生成构造器@AllArgsConstructor
@Data综合注解,生成 getter/setter、toString、equals/hashCode、RequiredArgsConstructor@Data class User { private String name; }
@Slf4j / @Log4j2 / @Log自动生成日志对象 private static final Logger log@Slf4jlog.info("hello")

其他还有 @Builder@SneakyThrows@Cleanup 等,用于简化构建对象、异常处理、资源关闭等。

所以lombok依赖仅仅是帮我们简化了代码的编写,本质上日志能力是由 logback 框架提供,并非 lombok 提供。

日志输出目标

日志默认输出在控制台,如同上例。

我们可以设置日志输出到文件、消息队列等地方,。

输出到文件:

logging:
file:
name: logs/app.log     # 指定日志文件(自动创建目录和文件)

测试效果

img

输出到消息队列比较复杂,spring 配置文件默认仅支持控制台 + 文件输出 。 如果你要用输出到消息队列 , 就需要用 Logback 原生配置,也就是 logback-spring.xmllogback.xml

新建配置文件 logback-spring.xml,路径如下:

img

Spring Boot 启动时,会自动去 classpath 根目录(也就是 resources/)下找这个文件。

有此需求再看官方文档或 AI 编写配置吧~

http://www.jsqmd.com/news/7374/

相关文章:

  • PINN训练新思路:把初始条件和边界约束嵌入网络架构,解决多目标优化难题
  • 图的匹配
  • Tarjan 算法
  • 临项交换
  • CF VP 记录
  • 华为设备MSTP - 指南
  • LabVIEW与PLC 汽车驻车制动自动调整 - 实践
  • 04. 布局管理
  • 关于安装博客园皮肤中有关于配置音乐播放器的补充(awescnb)
  • AGC VP 记录 2
  • 2025 --【J+S 二十连测】-- 第四套 总结
  • 深入解析:AI-调查研究-90-具身智能 机器人数据采集与通信中间件全面解析:ROS/ROS2、LCM 与工业总线对比
  • 函数-装饰器基础知识+推导式
  • 机器人产业学院 —— 教培机构 —— 职业发展 —— 全国性比赛
  • VUE - 实战 2
  • QBXT2025S刷题 Day1
  • 2025多校冲刺CSP模拟赛1(螳臂复活祭)
  • 短剧小程序核心专业的技术拆解:视频加载优化、用户留存与商业化落地​
  • 完整教程:Apache Doris 入门与技术替代方案
  • 福州市 2025 国庆集训 Day2 前三题题解
  • 2025 年马赛克厂家 TOP 企业品牌推荐排行榜,陶瓷,游泳池,喷墨,冰裂,拼花,防滑,复古,家装马赛克推荐这十家公司!
  • 原来你是这样的claude code aciton:没想象中好
  • 2025/9/29
  • FlareOn1 -- 5get_it
  • 2025/10/1
  • 2025 年阀门厂家 TOP 企业品牌推荐排行榜,管道阀门,气动,调节,电动执行器,生产,电磁,不锈钢,进口,耐高温阀门推荐这十家公司
  • 爬虫逆向-AST科技
  • tcp与udp 协议 - 摘星
  • 赛前训练4 extra 字典树
  • CF1450E Capitalism