当前位置: 首页 > 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);@Overridepublic 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              # 全局日志级别,默认是 INFOcom.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.dtcms.com/a/427293.html

相关文章:

  • 网站优化塔山双喜百度关键词快速排名方法
  • 第十二届全国社会媒体处理大会笔记
  • FFmpeg暂停、逐帧和音量
  • QT中的QTimer.singleShot()函数
  • TCP/IP 四层模型协作流程详解
  • windows显示驱动开发-调试间接显示驱动程序(一)
  • MySQL MVCC:通过 ReadView与 undolog版本链 分析读提交RC和可重复读RR的原理
  • STM32-USB_OTG_FS 与 USB_OTG_HS 的核心区别
  • 输入框内容粘贴时 nbsp; 字符净化问题
  • 网站建设要做哪些黑龙江牡丹江双鸭山伊春推广
  • 软考 系统架构设计师系列知识点之杂项集萃(163)
  • matlab cell 数据转换及记录
  • 涡度通量数据风浪区分析:涡度通量Footprint时空动态分析等析等
  • 【软考网工笔记】第五章(12)【补充】IP子网划分VLSM CIDR
  • 探秘最长连号序列:线性扫描算法与竞赛实战(洛谷P1420)
  • 网站建设计划方案网站内容管理系统(cms)
  • 做项目搭建网站 构建数据库asp影楼网站数据库用什么软件
  • 网站建立的优点如何确保网站安全
  • Ubuntu 如何安装.NET6 runtime
  • 前端-JS基础-day4
  • shell文件
  • 本地渗透测试靶机环境搭建指南(VMware + VirtualBox)
  • Anthropic新模型Claude Sonnet 4.5刷新基准,微美全息AI模型与算力基建赋能千行百业!
  • 云手机服务器多开需要注意哪些
  • mysql和Oracle用户设置双密码配置方法
  • 深圳中企动力网站翻新后seo怎么做
  • 沈阳网站改版网站免费下载app
  • 惠州建网站服务wordpress产品
  • 奉化建设网站万网买的网站备案吗
  • 速通ACM省铜第十八天 赋源码(Neo‘s Escape)