SpringBoot 日志文件:日志的作用?为什么要写日志?

简介: SpringBoot 日志文件:日志的作用?为什么要写日志?

🎇前言

日志、日志,日志就是记录发生了什么。为啥要记录发生了什么呢?想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?因此我们需要记录程序的行为,通过这些行为能让我们更好的发现和定位错误所在位置。


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

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

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

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


可以看出来日志在程序中扮演这非常重要的角色了。


1.日志长什么样子?

SpringBoot 项目启动的时候默认就会有日志输出,如下图:


fb737f699d844e9fba3dc7c9b630052c.png


通过上述日志信息提出三个疑问:

1.Spring Boot 如何打印日志?(提前把这个说了:它内置了日志框架,因此可以打印日志)

2.默认情况下,输出的日志并非是开发者定义和打印的,开发者怎么在程序中⾃定义打印⽇志呢?

3.日志默认打印在控制台上,而控制台的日志不能保存,如何将日志永久保存呢?

接下来让我们寻找找答案


2.自定义打印日志

自定义打印日志分为两步走:

在程序中得到日志对象

使用日志对象的相关语法输出打印内容

2.1 在程序中得到日志对象

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

在导包时,我们使用的时slf4j包下面的 Logger,这里不要导包导错了。



因为 SpringBoot 中内置了日志框架slf4j,所以我们可以直接在程序中调用slf4来输出日志。

2.2 使用日志对象打印日志

// 2.使⽤⽇志打印⽇志
logger.info("--------------要输出⽇志的内容----------------");

日志打印结果:



这日志打印出来看起来像是一串字符串,我们如何去看出来日志打印的是什么东西呢?看下图的介绍:



日志之间有很多等级划分,我们通常把他分为六个等级。


3.日志级别

3.1 日志级别的分类与使用

日志级别一览表(由上到下等级递增):


image.png


3.2 日志级别有什么用呢?

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

2.日志级别可以控制,不同环境下打印日志的要求可以设置(一般分为开发环境和生产环境),⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输出尽量少的日志。

第一条也许比较难理解,我们写代码演示一下,我们知道日志等级默认的是info级别的,我们打印如下日志:

@Controller
@ResponseBody
public class TestController {
    private final static Logger logger = LoggerFactory.getLogger(TestController.class);
    @RequestMapping("/sayHi")
    public String sayHi(String name) {
            logger.trace("----------- 我是 trace 级别的日志 -----------");
            logger.debug("----------- 我是 debug 级别的日志 -----------");
            logger.info("----------- 我是 info 级别的日志 -----------");
            logger.warn("----------- 我是 warn 级别的日志 -----------");
            logger.error("----------- 我是 error 级别的日志 -----------");
        if(!StringUtils.hasLength(name)) {
            name ="张三";
        }
        String res = "你好" + name;
        return  res;
    }

观察控制台:



你会新奇的发现,比info级别小的日志,没有出现在控制台,也就是没有打印,这就是第一条说的, 日志级别可以帮你筛选出重要的信息。

3.3 日志级别的设置

这个日志级别怎么有用,我们应该如何设置日志级别呢?答案是在配置文件(yaml文件或者properties文件)中设置,我们这里使用yaml文件。

打印大于error级别的日志,如下图,:

logging:
  level:
    root: error

设置完等级,我们再次启动项目,看看是否符合我们的预期,看下图,它符合我们的预期,只打印了 error级别的日志。



4.日志持久化保存

上方举得例子都是打印在控制台上的,然而在生产环境上需要将日志持久化保存下来,以便追溯问题位置。

想要将日志进行持久化保存,只需要在配置文件中指定日志的存储目录或者指定日志保存文件名之后,SpringBoot 就会将控制台的日志写到我们配置的目录或文件中去。

配置文件的保存路径:

# 设置日志文件的目录
logging:
  file:
    path: F:\\info\\

我们再次启动项目,打开设置好的路径,看看是否有日志保存:

打开后可以看到有日志保存,证明我们的设置是正确的。



5.更方便的日志输出

每次打印日志,我们都是使用 LoggerFactory.getLogger(×××.class)这样的操作,代码显得冗余,我们可以使用更简单好用的日志输出方法,使用 lombok 来更简单的输出。

其步骤大概分为两步:

1.添加 lombok 框架支持

2.使用 @Slf4j 注解输出日志

5.1 添加 lombok 框架

这个框架提供了非常多的简便注解,可以减少代码冗余,如果有需要可以去了解一下!

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

5.2 使用注释输出日志

我们在类上方添加@Slf4j注释,在使用时我们就会得到一个对象log对象。代码如下:

@Controller
@ResponseBody
@Slf4j
public class TestController {
    @RequestMapping("/sayHi")
    public String sayHi(String name) {
            log.trace("----------- 我是 trace 级别的日志 -----------");
            log.debug("----------- 我是 debug 级别的日志 -----------");
            log.info("----------- 我是 info 级别的日志 -----------");
            log.warn("----------- 我是 warn 级别的日志 -----------");
            log.error("----------- 我是 error 级别的日志 -----------");
        if(!StringUtils.hasLength(name)) {
            name ="张三";
        }
        String res = "你好" + name;
        return  res;
    }
}


🎆总结

1.日志时程序中的重要组成部分,使用日志可以快速的发现和定位问题。

2.在配置文件中设置日志时,设置的等级越高,收到的日志信息也就越少。

3.SpringBoot 内置了日志框架,默认情况下使用的是 info 日志级别打印在控制台上,我们可以通过配置文件将日志持久化。

4.在手搓日志中,代码有冗余,我们可以使用 lombok 提供的 @Slf4j 注解和 log对象 快速的打印自定义日志。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4天前
|
Oracle 关系型数据库 分布式数据库
实时计算 Flink版产品使用合集之日志文件快速增长如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
19 2
|
6天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
44 0
|
6天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
47 0
|
4天前
|
存储 关系型数据库 数据库
关系型数据库文件方式存储LOG FILE(日志文件)
【5月更文挑战第11天】关系型数据库文件方式存储LOG FILE(日志文件)
16 1
|
6天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
38 0
|
6天前
|
JavaScript Java API
【JavaEE】Spring Boot - 日志文件
【JavaEE】Spring Boot - 日志文件
6 0
|
6天前
|
Oracle 关系型数据库
|
6天前
|
安全 JavaScript Java
springboot实现文件防盗链设计
`shigen`,一位专注于Java、Python、Vue和Shell的博主,分享成长和技术。近期将探讨SpringBoot实现图片防盗链,通过限制`Referer`防止资源被盗用。基础版通过`WebMvcConfigurer`配置静态资源,升级版添加拦截器检查`Referer`,确保请求来源合法性。详细代码实现和案例可在文中链接找到。一起学习,每天进步!
46 13
springboot实现文件防盗链设计
|
6天前
|
Go 文件存储 iOS开发
LabVIEW崩溃后所产生的错误日志文件的位置
LabVIEW崩溃后所产生的错误日志文件的位置
11 0
|
6天前
|
XML Java Maven
Springboot整合与使用log4j2日志框架【详解版】
该文介绍了如何在Spring Boot中切换默认的LogBack日志系统至Log4j2。首先,需要在Maven依赖中排除`spring-boot-starter-logging`并引入`spring-boot-starter-log4j2`。其次,创建`log4j2-spring.xml`配置文件放在`src/main/resources`下,配置包括控制台和文件的日志输出、日志格式和文件切分策略。此外,可通过在不同环境的`application.yml`中指定不同的log4j2配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。

热门文章

最新文章