日志作为一个完整程序的一部分,可以帮助我们发现和定位程序中出现的问题,也记录了许多有用并且重要的信息。
在SpringBoot中,框架有内置基础的日志框架,在我们运行SpringBoot项目时,可以在控制台看到相关的日志信息:
这里输出的日志是由于框架内置默认打印的,那么开发者要如何自定义日志打印呢?
自定义日志的打印包含了两步:
package com.example.demo;
import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController2 {
//得到日志信息
private static Logger logger= LoggerFactory.getLogger(TestController2.class);
//使用日志对象自定义打印日志内容
@PostConstruct
public void postConstruct(){
logger.info("~~~~~~~~~~~~~~~~~~~~~自定义打印的日志~~~~~~~~~~~~~~~~~~~~~~~~~");
}
}
执行结果:
info( )方法可以使用双引号定义需要输出的指定内容;
根据使用频率和场景的不同,日志分为了不同的级别,日志的级别的主要作用就是筛选和过滤符合目标的日志信息;
常见的日志级别从低到高分别有:
日志的级别越低,接收和打印的日志信息就越少;
日志的使用主要包括日志信息级别的配置和保存路径的设置,这些设置同样需要在配置文件中进行配置;
经配置文件设置日志的打印级别之后,最终程序打印的日志的级别一定是大于等于配置文件中设置的日志级别的;即当配置文件设置日志的打印级别为debug时,最终打印的日志就是日志级别为debug、info、warn、error级别的;不在配置文件中主动设置日志打印级别时,默认从info级别开始打印;
对于输出在控制台的日志信息,当我们关闭程序或重新运行程序时,之前的日志信息都会被清除。但在一些场景下,我们可能事后需要根据日志来获取一些有用的信息,这就需要将日志进行保存,方便之后进行溯源,即日志的持久化。
日志的持久化操作依然依靠配置文件来实现,即在配置文件中指定日志的存储路径或指定日志保存的文件名;
关于日志的持久化,对于同一个程序,日志信息会不断追加,而不会因为程序重新运行而被覆盖;当日志文件过大时,会默认进行文件的拆分。
前面提到自定义打印日志时,第一步首先需要得到日志对象,这一步操作无疑是繁琐和麻烦的,因此我们可以使用lombok框架来解决这个问题。
使用lombok来实现更简单的日志输出,第一步就是为项目添加lombok框架支持:
最终在pom.xml文件中就可以看到添加的lombok依赖;
lombok依赖添加成功以后,就可以借助@Slf4j注解来输出日志了:
package com.example.demo;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class TestController3 {
@PostConstruct
public void postConstruct(){
log.info("~~~~~~~~~~~~~~~~~~~~~log.info~~~~~~~~~~~~~~~~~~~~~~~~~");
}
}
log对象是由注解@Slf4j提供的,这也就省略掉了之前手动获取日志对象的操作;其实之前手动获取日志对象的代码就等价于这里的注解,这一点可以通过程序运行生成的字节码文件看到:
左边是我们编写的java文件,右边是程序编译运行之后生成的.class文件,可以看到注解@Slf4j就是获取日志对象,与手动获取的方式的代码等价;
lombok框架还提供了许多注解,使用这些注解可以在一定程度上简化代码,常见的有: