目录
一、日志的作用
二、日志文件的简单使用
1、Spring Boot中的默认日志
2、自定义日志打印
三、日志级别
1、日志级别分类
2、日志级别的设置
3、日志持久化
四、基于LomBok的日志输出
1、安装Lombok插件
2、使用Lombok添加日志
3、使用Lombok添加getter和setter方法
4、LomBok的工作原理
一、日志的作用
日志是我们程序中极其重要的一部分,程序在执行期间报错,我们需要通过日志来排查错误,如果没有日志,我们只能靠猜来找程序中的错误,显然这是非常荒唐的做法。通过日志来排错只是它的一种用途,还可以使用日志来实现下面的用途
- 记录用户登录日志,方便分析用户是正常登录还是恶意破解用户
- 记录系统的操作日志,方便数据恢复和定位操作人
- 记录程序执行时间,放便为以后优化程序提供数据支持。
二、日志文件的简单使用
1、Spring Boot中的默认日志
运行Spring Boot程序,我们可以看见控制台上就输出了默认日志
通过这里我们可以知道Spring Boot内置了日志框架,从而完成了日志在控制台的打印。这里默认打印的日志并不是开发者自己定义的日志。那么我们自己怎样打印日志呢?
很多老铁想到了使用System.out.println()来打印,但是很遗憾,不能使用它来打印日志,当然使用这个方法,也可以按照上面的格式,打印出一个日志,但是最大的问题就是这种打印日志的方式无法保存日志并且显示不出来日志的级别。
2、自定义日志打印
开发者自定义日志的实现步骤
- 得到日志对象
- 使用日志对象提供的方法输出想要打印的内容
1️⃣得到程序中的日志对象
在程序中获取日志对象需要使用日志工厂LoggerFactory。
//1.得到日志对象
private static Logger log = LoggerFactory.getLogger(LogController.class);
这里getLogger方法中需要传入当前类,用来说明这个日志属于那个类,有利于我们直观的定位到出现问题的位置。还需要注意的是我们在使用Logger类的时候,会出现很多Logger的提示,我们要选择org.slf4j包下的。
2️⃣使用日志对象打印日志
这里我们将所有日志级别都打印出来
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(LogController.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);
}
}
我们代码中写了5种级别的日志,但是只打印了3种 ,这是由于Spring Boot默认情况下日志的级别为info,比info级别低的日志不会被打印出来。具体是什么情况,下面的内容中会说到。
三、日志级别
1、日志级别分类
日志级别的做用是设置不同级别的日志来查看不同程度的问题信息,方便定位排查问题。比如我们将默认的日志级别改为warn,那么就只会出现warn及更高级别日志信息。
日志的级别可以分为六种
- trace:微量、少许的意思,几倍最低;
- debug:需要调试时候的关键信息打印
- info:普通的打印信息(默认的日志级别);
- warn:警告,不影响使用,但需要注意的问题;
- error:错误信息,级别较高错误日志信息;
- fatal:致命的日志级别,只有系统在崩溃时才会输出的日志信息
这里有6个日志级别实际上,我们可以使用的日志级别只有前5个,fatal只有系统才能使用。这几个日志级别从上到下逐级递增。
2、日志级别的设置
1️⃣给当前项目设置默认的日志级别
我们在配置文件中通过logging.level.root=warn来设置.使用这个方式配置的是项目中所有的日志都输出warn级别及之上的日志。
logging.level.root=warn
可以看见控制台上的日志打印就非常少了,就只出现了我们自己写的日志了。 将比warn级别低的日志全都过滤掉。
2️⃣给项目中文件夹单独设置日志级别
设置com.example.demo.controller包下的类,debug以及更高级别的日志打印在控制台上。
logging.level.com.example.demo.controller=debug
❗❗❗为什么Spring Boot 可以打印日志并设置日志级别?
❓❓❓因为Spring Boot内置了两个日志框架:SLF4J和LogBack。这里设置两个日志框架可以这样理解这两个框架的关系,比如你装修需要找装修公司,首先你需要和客服交流,然后客服根据你的需求找相应的师傅。这里的SLF4J就是客服,LogBack就是干活的师傅,代码底层的实现我们不关注,我们只需要和SLF4J对接。SLF4J是让开发者使用和调用的框架,LogBack是最底层实现日志相关操作的框架(我们看见的控制台上的日志的日志,是由它完成的)。
3、日志持久化
上述我们说到的日志的分类和设置日志的级别,在控制台看起来都是完全可以打印出来的,但是项目中我们的程序是要将这些日志持久保存的,和之前一样只是打印在控制台上是不行,需要我们保存下来,以便处理问题之后追溯问题。
让日志持久化存在两种设置方式。
1️⃣在配置文件中设置日志的保存路径
logging.file.path=D:/hello/
将日志保存在了d盘的hello目录中。
2️⃣设置日志保存的文件名,这样就表示你需要将日志保存下来
logging.file.name=springboot.log
重新启动项目,就可以在项目目录中看见日志文件
这些日志文件中的日志信息是以追加的方式保存在文件中的,由于是追加的方式添加,所以就会出现日志文件放不下的情况,出现这种情况,他会自动的在我们设置的存放日志文件的目录中在创建一个新的文件,将之后的日志信息存放在里面。
四、基于LomBok的日志输出
lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量.
1、安装Lombok插件
无论什么版本的idea都需要安装Lombok。
先在你的idea中搜索有没有安装Lombok,你安装的有些插件中捆绑了这个插件。如果没有安装,在Marketplace中搜索Lombok,进行安装即可。
在项目中添加lomBok依赖。在pom.xml中单击鼠标右键,找到Generate,点击然后找到Edit Starters点击。
2、使用Lombok添加日志
之前我们想要输出日志需要使用到日志工厂,从其中得到得到日志对象。
private static Logger log = LoggerFactory.getLogger(LogController.class);
现在使用Lombok中的@slf4j注解,就可以代替这句代码, 更简单的输出日志。
3、使用Lombok添加getter和setter方法
我们之前创建一个实体类的时候,创建的属性如果为private的,还需要在代码中写getter和setter方法,这样就显得代码很臃肿,如果只是一点属性,使用getter和setter方法,都还可以,但是如果属性很多,那么代码的可读性就会降低。现在我们使用Lombok之后,即使属性再多,也不会出现代码臃肿的问题。
上述我们使用了三个Lombok注解,当然如果你觉得这些注解加起来麻烦,我们还可以使用组合注解@Data,更加简单。一个注解代替前面三个。
4、LomBok的工作原理
LomBok是一种Java库,他提供了一些注解来自动生成代码。Lombok是在程序的编译器期通过注解将对应的代码添加到程序中,它并不会影响到程序的性能。他只是在编译期简化了程序员代码的编写,提高了代码的可读性。
我们通过程序编译的字节码来验证