【Spring Boot】Spring Boot日志详情:基于lombok的日志输出

这篇具有很好参考价值的文章主要介绍了【Spring Boot】Spring Boot日志详情:基于lombok的日志输出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1. 何为日志文件?

日志文件是一种记录计算机系统或应用程序运行状态和活动的文件。日志文件可以包含各种重要信息,如错误报告、警告、事件、用户活动等。日志文件通常用于故障排除、性能优化、安全审计和法律合规等方面。日志文件可以在本地存储,也可以通过网络传输到远程服务器进行集中存储和分析。对于大型系统和应用程序,日志文件通常很大,需要专门的工具和技术来处理和分析。

简单点儿来说,日志文件就是帮助我们记录程序开发或者使用过程中的一些必要信息,帮助我们进行后期的维护和纠错~


2. 日志文件的作用

日志是程序的重要组成部分,最主要的作用就是帮助我们 排除和定位问题, 除此之外,还有如下常用功能:

  • 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
  • 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
  • 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。

在日常开发中,日志也被广泛使用:

  1. 调试和故障排除:当代码出现问题时,日志可以帮助开发人员确定问题所在,信息包括错误消息、异常堆栈和变量值。开发人员可以利用这些信息快速定位问题。

  2. 性能分析和优化:日志中可以记录程序的运行时间、内存使用情况和磁盘IO等信息。开发人员可以利用这些信息来寻找性能瓶颈,并优化代码以提高性能。

  3. 安全监控:日志可以记录系统和应用程序的访问情况、用户行为,以及异常登录等信息。这些日志数据有助于开发人员监控和检测潜在的安全问题。

  4. 操作审计:日志可以记录用户的操作,包括登录、退出、修改记录等。这些日志可以用于审计和追踪用户活动。

  5. 运维和监控:日志可以用于监控应用程序的运行状态,并在系统出现异常时通知运维人员。开发人员也可以使用日志来跟踪应用程序的版本和部署情况。

总之,日志是开发中不可或缺的一部分,它可以帮助开发人员快速排查问题,优化性能,并保证应用程序的安全和可靠性。
【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring


3. 日志文件的基本使用

3.1 Spring Boot中的日志

Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示:
【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring
可见,Spring Boot内置了日志框架,从而能完成日志在控制台的打印。那么问题就来了,同样是在控制台打印,为什么不使用System.out.print打印呢? 答案是显然的:

  • 使用System.out.print,并不支持日志级别(后面会讲);
  • 使用System.out.print,是会将信息打印到控制台,但是我们并不清楚是哪个类,是什么原因,以及时间等信息,且打印的信息非常多,达不到日志所需要的快速定位问题所在的功能。

还有一个问题,在控制台打印的日志是不能被永久保存的,怎么把⽇志永久的保存下来呢? 别急,带着问题我们继续往后看~
【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring

3.2 自定义日志打印

自定义日志打印主要步骤如下:

  1. 获取日志对象
  2. 使用日志对象的相关方法输出要打印的内容

获取日志对象
在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory,代码如下:

// 1. 得到日志对象
private final Logger logger = LoggerFactory.getLogger(UserController.class);

其中,getLogger方法需要传入当前类,用于说明日志归属类,便于我们更加直观的定位到问题类。同时,需要注意的是,Logger 对象属于 org.slf4j 包下。

使用日志对象打印日志
日志对象的打印方法有很多,示例代码如下:

// 2. 写日志的方法
@RequestMapping("/hi")
public String sayHi() {
    // 写日志
    logger.trace("我是 trace");
    logger.debug("我是 debug");
    logger.info("我是 info");
    logger.warn("我是 warn");
    logger.error("我是 error");
    return "Hi, Spring Boot.";
}

实现结果:
【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring
可以看到,使用了 5 种不同的方法打印日志信息,但是,控制台只打印了其中的三种,这是由于日志级别的设置造成的,具体后面详细说明。同时,通过控制台打印的信息我们可以看出,一条日志信息包含时间、日志的级别、线程ID、线程名称、日志归属的包和类以及日志的内容。


4 日志级别

4.1 日志级别的作用

日志级别的作用在于通过设置不同级别的日志来查看不同严重程度的问题信息,方便定位问题,快速排除问题。比如在生产环境中,一般只记录INFO及以上级别的日志,这样可以减少日志量,避免影响系统性能。而在调试过程中,一般会开启DEBUG级别的日志,以便更详细地了解程序的运行情况,从而找到问题所在。
总的来说,通过设置日志级别,可以大大节省开发者信息筛选的时间,帮助我们快速定位和排除问题。

4.2 日志级别的分类

⽇志的级别分为:

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认⽇志级别);
  • warn:警告,不影响使⽤,但需要注意的问题;
  • error:错误信息,级别较⾼的错误⽇志信息;
  • fatal:致命的,因为代码异常导致程序退出执⾏的事件。

实际中,我们能自定义的只有前5个,而致命级别的日志,会在代码异常导致程序退出时执行。日志级别的顺序如下图所示:
【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring
例如,当设置日志级别为 error 时,我们就只能收到 error、fatal 级别的日志了。而之前的案例中,是因为 Spring Boot 中默认的日志级别是 info, 因此,控制台只有 info、warn、error 级别的日志信息。

4.3 日志级别的设置

日志级别的设置,只需要在配置文件中设置 logging.level 配置项即可。

配置根路径的日志级别:

# 日志级别设置
logging:
  level:
    root: error

此时,我们再次运行自定义日志打印中的代码,得到如下结果:
【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring
可见,控制台干净了许多,原来的info等日志信息都被筛选掉了~

在根路径日志级别的基础上配置子目录日志级别

# 日志级别设置
logging:
  level:
    root: error
    com:
      hxh:
        demo:
          controller: trace

此时,对于 com.hxh.demo.controller 包下的类,trace 及以上级别的日志信息被打印到控制台上。
【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring


5 日志持久化

到这里,我们已经了解到如何自定义日志打印以及如何设置日志级别。但是还遗留了一个致命性的问题:日志信息是输出在控制台的,如果重新启动项目,控制台的信息不就消失了吗?有没有什么方法能够将日志信息保存起来,方便以后查看呢?
答案是肯定的,在生产环境中,我们常常把日志信息保存下来。而将日志信息保存下来的过程就叫做日志持久化。想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后,
Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。

配置日志文件的保存路径:

# 设置日志文件的目录
logging:
  file:
    path: D:\\home\\log

【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring

配置日志文件的文件名:

logging:
  file:
    name: D:\\home\\log\\spring-1024.log

【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring


6 基于lombok的日志输出

6.1 lombok 简单输出日志案例

通过观察自定义日志打印的案例,我们可以看出,每个需要打印日志的归属类都需要有如下语句:

private final Logger logger = LoggerFactory.getLogger(UserController.class);

该语句比较固定,写起来不太“优雅”,这里提供一种更加简洁的方式:使用 lombok 来更简单的输出,具体步骤如下:

  1. 添加 lombok 框架支持
  2. 使⽤ @slf4j 注解输出⽇志

添加 lombok 依赖

<dependency>
	<groupId>org.projectlombok</groupId>
 	<artifactId>lombok</artifactId>
 	<version>1.18.20</version>
 	<optional>true</optional>
</dependency>

输出日志
使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名(原因见后面lombok原理)

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
@RequestMapping("/student")
@Slf4j
public class StudentController {
    
    // 打印日志
    @RequestMapping("/hi")
    public String sayHi() {
        log.error("这是通过 lombok 打印的日志信息~");
        return "hi";
    }
}

【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring

6.2 浅谈 lombok 原理

Lombok 是一种 Java 库,它提供了一些注解来自动生成 Java 代码。Lombok 的原理是在编译时通过 Java 的注解处理器和 AST(Abstract Syntax Tree,抽象语法树)转换器代替开发人员手动编写常见的 Java 代码(如构造函数、getter 和 setter 方法、equals 和 hashCode 方法等)。也就是说,Lombok 在编译期间生成代码,而不是在运行时生成。 Lombok 的使用可以节省开发者在编写 Java 代码时的时间和精力,并且可以让代码更加简洁易懂。

lombok 作用如下图所示:
【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring

之前使用 lombok 简单输出日志的案例中,编译生成的字节码文件反编译后如下图所示:
【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring
@slf4j 注解,实质上就是帮助我们进行了 log 对象的创建,我们只需要使用 log 对象即可~

常见的 lombok 注解如下:

注解 说明
@Getter 自动生成getter方法
@Setter 自动生成setter方法
@ToString 自动生成toString方法
@EqualsAndHashCode 自动生成equals和hashCode方法
@NoArgsConstructor 自动生成无参构造器
@AllArgsConstructor 自动生成全参构造器
@RequiredArgsConstructor 自动生成必填参数的构造器
@Data 自动生成getter、setter、toString、equals和hashCode方法
@Builder 自动生成Builder模式的代码
@Log 自动生成日志对象
@Slf4j 自动生成@Slf4j注解
@Value 生成不可变类,即final字段以及对应的getter方法
@UtilityClass 生成工具类,包含私有构造器和静态方法

写在最后

本文被 JavaEE编程之路 收录点击订阅专栏 , 持续更新中。
 以上便是本文的全部内容啦!创作不易,如果你有任何问题,欢迎私信,感谢您的支持!

【Spring Boot】Spring Boot日志详情:基于lombok的日志输出,JavaEE编程之路,spring boot,服务器,linux,java-ee,spring文章来源地址https://www.toymoban.com/news/detail-524875.html

到了这里,关于【Spring Boot】Spring Boot日志详情:基于lombok的日志输出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot学习随笔- 本地化测试(@SpringBootTest)、热部署(spring-boot-devtools)、日志Logback常用级别使用、指定包级别输出

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 频繁启动服务器进行功能的访问非常繁琐、SpringBoot给我们提供了用于测试的依赖,自动集成Junit,使用了这个以来后,test包在打包时不会被打包进去 @SpringBootTest注解 修饰在类上,用来启动本地Spring环境 作用 热部署是指

    2024年02月05日
    浏览(78)
  • 【Spring Boot】Spring Boot配置文件详情

     Spring Boot是一个开源的Java框架,用于快速构建应用程序和微服务。它基于Spring Framework,通过自动化配置和约定优于配置的方式,使开发人员可以更快地启动和运行应用程序。Spring Boot提供了许多开箱即用的功能和插件,包括嵌入式Web服务器、安全性、数据访问、缓存、测试

    2024年02月12日
    浏览(56)
  • 从零开始 Spring Boot 38:Lombok 与依赖注入

    图源:简书 (jianshu.com) 在之前的文章中,我详细介绍了 Lombok 的用法,考虑到在 Spring 中使用依赖注入(DI)是如此的频繁,因此有必要讨论使用 Lombok 时可能对依赖注入造成的影响。 我们都知道,Spring 中的依赖注入分为三种情况: 通过属性进行依赖注入。 通过构造器进行依

    2024年02月08日
    浏览(70)
  • SSMP整合案例(2) Spring Boot整合Lombok简化实体类开发

    好啊 接着我们上文SSMP整合案例(1) 构建 Spring Boot Vue MySql项目环境 我们继续 接下来 我们要在java项目中 建立出数据库表对应的实体类 我们还是先看看自己上文中 创建的这个 book表 其中四个字段 主键id 数字枚举类型的type 字符串类型name 字符串类型 description 我们打开idea 找到上

    2024年02月09日
    浏览(47)
  • 在 Spring Boot 应用程序中将 MapStruct 与 Lombok 结合使用的方法

    在本文中,您将找到有关如何高效使用 MapStruct、Lombok 和 Spring Boot 的代码示例和说明。         当您实现任何规模的服务时,您通常需要将数据从一种结构移动到另一种结构。通常,这是在不同逻辑层使用的相同数据 - 在业务逻辑、数据库级别或用于传输到前端应用程序

    2024年02月14日
    浏览(40)
  • 执行Spring Boot项目时报错:Lombok requires enabled annotation processing

    在使用 Lombok 时,你需要启用注解处理器(annotation processing)。下面是一些步骤来启用注解处理器: 确保已在项目中添加了 Lombok 的依赖。可以在项目的构建配置文件(如 Maven 的 pom.xml 或 Gradle 的 build.gradle)中添加以下依赖项: 在 IntelliJ IDEA 中打开项目设置(File - Settings)。

    2024年02月06日
    浏览(39)
  • 【JavaEE & Spring】SpringBoot 日志

    为什么要学习日志 对于平常来说, 我们就在使⽤ System.out.print 来打印⽇志了 随着项⽬的复杂度提升, 我们对⽇志的打印也有了更⾼的需求, ⽽不仅仅是定位排查问题. 有时候我们需要将日志持久化, 进行对应的数据分析, 但是 System.out.print 不能很好的满⾜我们的需求, 我们就需要

    2024年01月25日
    浏览(38)
  • Spring Boot入门(23):基于AOP实现自定义注解拦截接口日志并保存入库 | 超级详细,建议收藏

            在上两期中,我们着重介绍了如何集成使用 Logback 与 log4j2 日志框架的使用,今天我们讲解的主题依旧跟日志有关,不过不是使用何种开源框架,而是自己动手造。         Spring的核心之一AOP;AOP翻译过来叫面向切面编程, 核心就是这个切面. 切面表示从业务逻辑中

    2024年02月11日
    浏览(49)
  • 【JavaEE进阶】 Spring Boot⽇志

    在没有学习spring时,我们可能使⽤ System.out.print 来打印⽇志了.通过打印⽇志来发现和定位问题,或者根据⽇志来分析程序的运⾏过程. 在Spring的学习中,也经常根据控制台的⽇志来分析和定位问题.随着项⽬的复杂度提升,我们对⽇志的打印也有了更⾼的需求,⽽不仅仅是定位排查

    2024年01月24日
    浏览(52)
  • 【JavaEE】Spring Boot - 配置文件

    【JavaEE】Spring Boot 开发要点总结(2) 所有重要和必要的数据都是在配置文件中配置的 简洁明了,干净利落,修改方便,相比于xml,更有代码的感觉,功能用处也更多更被重视 例如: 数据库的连接时的需要的信息配置(用户名,url,密码) 项目的启动端口是什么(server.po

    2024年02月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包