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

news/2025/10/2 21:42:45/文章来源:https://www.cnblogs.com/wzzkaifa/p/19124050

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.mzph.cn/news/925322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PINN训练新思路:把初始条件和边界约束嵌入网络架构,解决多目标优化难题

PINNs出了名的难训练。主要原因之一就是这个多目标优化问题。优化器很容易找到投机取巧的路径——比如拼命降低微分方程残差,但完全不管初始条件和边界约束。只要给初始条件和边界损失配的权重够低,它们增加的那点损…

微信公众网站开发2345网址导航浏览器

从此记录工作、学习、生活的那些事儿!转载于:https://www.cnblogs.com/alwaysjava/p/4221362.html

Tarjan 算法

Tarjan 算法有向图的强连通分量 SCC 定义:从其中的任意一个节点出发,都能经过其中的所有点,即其中任意两个节点相通。 遍历方式:DFS 序遍历。 有向边分类:树枝边,前向边,后向边,横叉边。 时间戳与追溯值:记 \…

数学章节总结

一、矩阵乘法介绍一个 \(m \times n\) 的矩阵是一个由 \(m\) 行 \(n\) 列元素排列成的矩形阵列。即形如: \[A = \begin{bmatrix} a_{(1,1)} & a_{(1,2)} & \cdots & a_{(1,n)} \\ a_{(2,1)} & a_{(2,…

安徽省建设工程造价管理网站苏州自助建站

在上一篇文章中,我们介绍了jQuery前端PHP在线测试题效果。这篇文章将结合实例给大家介绍如何使用jQueryPHPMySQL来实现在线测试题,包括动态读取题目,答题完毕后台评分,并返回答题结果。查看演示下载资源:1332次 下载资…

运城做网站价格百度关键词热度

目录 一、监督学习 (一)回归 (二)分类 二、无监督学习 聚类 一、监督学习 介绍:监督学习是指学习输入到输出(x->y)映射的机器学习算法,监督即理解为:已知正确答案…

临项交换

知周所众,10月2日是一个学贪心的好日子(不是 写一下学习总结吧 先写一下印象最深的最简单的(其实不然临项交换 临项交换 例题一:排队接水 知周所众,排队接水的正解是把接水时间少的人放在队伍的前面,那么这背后的…

华为设备MSTP - 指南

华为设备MSTP - 指南2025-10-02 21:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

CF VP 记录

CF2129 B 因为是排列所以我们可以从小到大考虑每个数。对于一个数,如果不变那么贡献是前面比它大的数个数,如果改变那么贡献是后面比它大的数的个数,取最小值即可。 C 首先我们得找到一个确定的括号,这样我们才可以…

实用指南:Autudl华为昇腾系列NPU简介和部署推理yolo11 yolov8 yolov5目标检测模型

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

LabVIEW与PLC 汽车驻车制动自动调整 - 实践

LabVIEW与PLC 汽车驻车制动自动调整 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

04. 布局管理

一、什么是布局在 Qt Quick 中有两套与元素布局相关的类库,一套叫作 Item Positioner(定位器),一套叫作 Item Layout(布局)。其实在 Qt Quick 中还有一个 锚布局,它通过 Item 的 anchors 属性实现,是 Qt Quick…

关于安装博客园皮肤中有关于配置音乐播放器的补充(awescnb)

首先,关于安装博客园皮肤的教程,请看教程: https://www.yuque.com/awescnb/user 大佬的教程非常详细且通俗易懂,只要有一点点前端基础,很短时间就能安装完成 但有关于音乐播放器的配置中,获取音乐url以及lrc歌词…

AGC VP 记录 2

AGC VP 记录 为了防止上一个内容太多比较卡,故新开了一个。 AGC041~AGC060 AGC060 [AGC060A] No Majority skip。Submission #69562933 - AtCoder Grand Contest 060 [AGC060B] Unique XOR Path给定一个 \(n\times m\…

婚纱定制网站哪个好做特卖网站

第二期云开发0基础训练营热力来袭!课程升级、更佳体验、依旧免费!每年的 “金九银十” 都是传说中的学习黄金期!这期间在校的小伙伴面临开学季/求职季/考研季挑战,已经步入社会的也即将步入年终前的冲刺阶段。所以,这段…

2025 --【J+S 二十连测】-- 第四套 总结

总结 T1 考场上很快想出了正解,并打出了代码,没什么问题 T2 考场上很快就打出了正解,但是由于精度问题,导致失分 T3 考场上没有想到解法,打了个部分分,但是挂0 T4 考场上打了个部分分,哪全了 题解 T1 不难发现,…

无锡市城乡和住房建设局网站wordpress ffmpeg

在手工测试阶段,针对项目输出了测试用例,如果这些测试用例需要在版本迭代的过程中,需要进行回归测试,通过手工重复地执行测试用例,将会耗费大量的人力。 为此应运而生就有了自动化测试,通过使用自动化工具…

深入解析:AI-调查研究-90-具身智能 机器人数据采集与通信中间件全面解析:ROS/ROS2、LCM 与工业总线对比

深入解析:AI-调查研究-90-具身智能 机器人数据采集与通信中间件全面解析:ROS/ROS2、LCM 与工业总线对比pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

函数-装饰器基础知识+推导式

装饰器:    在不改变原函数代码基础上,为原函数扩展功能装饰器格式: ##装饰器的编写(函数的嵌套,外城函数返回内城函数): def wrapper (funk):def inner (*args,**kwags):#自定义共能,根据功能在funk函数执行…

用ip访问没有备案的网站国内外知名市场调研公司

Redis,作为内存数据结构存储的佼佼者,其高性能表现一直备受赞誉。那么,Redis究竟是如何实现这一点的呢?接下来,我们将更深入地探讨其背后的关键技术,并提供进一步的优化策略。 一、内存存储与数据结构设计…