【SpringBoot】讲清楚日志文件&&lombok

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【SpringBoot】讲清楚日志文件&&lombok

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、日志是什么?

⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?

答案是否定的,写程序不是买彩票,不能完全靠猜,因此⽇志对于我们来说,最主要的⽤途就是排除和定位问题。

#除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:

1.记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。

2.记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。

3.记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。

4.以上这些都是⽇志提供的⾮常实⽤的功能

二、⽇志怎么⽤?

Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示

这个就是我们说的日志,说明日志在springboot里是内置好的,那么我们应该怎么怎么自定义打印日志呢

三.自定义打印日志

3.1在程序中得到日志对象

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

代码如下(示例):

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

⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位到问题类

3.2使用日志打印对象

⽇志对象的打印⽅法有很多种,我们可以先使⽤ info() ⽅法来输出⽇志,如下代码所示

package com.example.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogController {

    // 1.得到日志对象
    private static Logger log =
            LoggerFactory.getLogger(TestController.class);

    @RequestMapping("/log")
    public void log() {
        String msg = "今天已经周二了。";
        log.trace("trace -> " + msg);
        log.debug("debug -> " + msg);
        log.info("info -> " + msg);
        log.warn("warn -> " + msg);
        log.error("error -> " + msg);
    }

}

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

//@Controller
//@ResponseBody
@RestController
@PropertySource(value = "classpath:application.properties",
        encoding = "utf-8")
public class TestController {

    @Value("${myimage.path}")
    private String myImage;

    @RequestMapping("/sayhi")
    public String sayHi() {
        System.out.println(LocalDateTime.now() +" 日志 " +
                "com.example.demo.controller.TestController");
        return "你好,Spring Boot -> " + myImage;
    }
}


四.⽇志级别

4.1日志级别有什么用

1.⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。

2.⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。

4.2 ⽇志级别的分类与使⽤

⽇志的级别分为:

trace:微量,少许的意思,级别最低;

debug:需要调试时候的关键信息打印;

info:普通的打印信息(默认⽇志级别);

warn:警告,不影响使⽤,但需要注意的问题;

error:错误信息,级别较⾼的错误⽇志信息;

fatal:致命的,因为代码异常导致程序退出执⾏的事件;

五.日志持久化

可以和我这样子配置

是在application.yml里写的,记得要俩个斜扛,一个是转义的

六.lombok

6.1添加lobok依赖

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

注意:使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,

这是 lombok 提供的对象名

6.2lombok原理

lombok 能够打印⽇志的密码就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录,如下

6.3lombok 更多注解说明

注解 作⽤

@Getter ⾃动添加 getter ⽅法

@Setter ⾃动添加 setter ⽅法

@ToString ⾃动添加 toString ⽅法

@EqualsAndHashCode ⾃动添加 equals 和 hashCode ⽅法

@NoArgsConstructor ⾃动添加⽆参构造⽅法

@AllArgsConstructor ⾃动添加全属性构造⽅法,顺序按照属性的定义顺序

@NonNull 属性不能为 null

@RequiredArgsConstructor ⾃动添加必需属性的构造⽅法,

final +@NonNull 的属性为必需

注解 作⽤

@Data @Getter + @Setter + @ToString +

@EqualsAndHashCode +

@RequiredArgsConstructor +

@NoArgsConstructor

⽇志注解

@Slf4j 添加⼀个名为 log 的⽇志,使⽤ slf4j

总结

今天的博客,希望大佬们能在评论指出错误!~~😘😘

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
8天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
43 5
|
7天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
113 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
7天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
14天前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
53 1
SpringBoot获取项目文件的绝对路径和相对路径
|
8天前
|
网络协议 Java
springboot配置hosts文件
springboot配置hosts文件
35 11
|
24天前
|
XML Java Kotlin
springboot + minio + kkfile实现文件预览
本文介绍了如何在容器中安装和启动kkfileviewer,并通过Spring Boot集成MinIO实现文件上传与预览功能。首先,通过下载kkfileviewer源码并构建Docker镜像来部署文件预览服务。接着,在Spring Boot项目中添加MinIO依赖,配置MinIO客户端,并实现文件上传与获取预览链接的接口。最后,通过测试验证文件上传和预览功能的正确性。
springboot + minio + kkfile实现文件预览
|
5天前
|
Windows Python
如何反向读取Windows系统日志EVTX文件?
以下是如何反向读取Windows系统日志EVTX文件
15 2
|
7天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
13天前
|
存储 前端开发 JavaScript
|
13天前
|
存储 Java API