哈喽呀,你好呀,欢迎呀,快来看一下这篇宝藏博客吧~~~
目录
1.日志快速扫盲
2.Spring Boot项目日志简单分析
3.自定义打印日志
4.通过设置日志的级别来筛选和控制日志输出的内容
5.日志持久化
什么是日志?说白了就是控制台里面所打印的信息,还记得我们之前写普通java代码时,代码出现bug了之后,我们都是在控制台看出错信息,从而定位到代码出错的地方.控制台里面的一系列信息就是日志.所以日志对于我们来说有一个最关键的作用就是发现问题,定位问题.当然除了发现和定位问题之外,我们还可以通过日志来实现以下功能:
也就是说你的一切对程序的操作都会在日志中显示出来.以上这些都是日志提供的非常实用的功能.
Spring Boot 项目在启动的时候默认就有日志输出,如下图所示:
以上内容就是Spring Boot 输出的控制台日志信息.简单分析一下,如下图所示:
通过上述日志信息我们能发现以下3个问题:
我们可以带着这几个问题我们来总结一下我们到底要学习关于日志的什么:
- 输出自定义日志的信息
- 通过设置日志的级别来筛选和控制日志输出的内容
- 将日志持久化
开发者自定义打印日志主要就是以下 2 个实现步骤:
- 得到日志对象
- 通过日志对象调用相关方法输出要打印的内容
在程序中获取日志对象需要使用日志工厂LoggerFactory,如下代码所示:
private static Logger log= LoggerFactory.getLogger(TestController.class);
注意:这里的Logger选用slf4j,如下图:
以上代码的意思是在TestController这个类中得到一个日志对象log,通过log对象就可以实现打印.代码如下:
启动服务器,进行访问,结果如下:
至此,我们自定义的日志就打印出来了.这个输出语句就带上了它的出处,时间,线程id等.
PS:如果要打印不同类中的日志,那我们就需要在类中都获取一次日志对象,也就是要再写一次这样的代码:
那有没有更简单的写法呢,答案是肯定的.我们需要添加Lombok的框架支持,添加完了之后直接在当前类上加入@Slf4j这个注解即可,此时我们就可以使用log这个对象去调用它的一些方法了,如下图所示:
得到日志对象之后,我们可以调用相关的方法输出我们自定义的日志,我们来看一下以下这段代码:
启动项目,控制台如下:
看一下结果,是不是觉得有点奇怪,按理说应该会将上述五个都打印出来,但是只打印了3个.为什么呢?这就与日志级别有关了,我们来看一下:
日志级别分为以下几种:
- trace:微量,少许的意思,级别最低
- debug:需要调试时候的关进信息打印
- info:普通的打印信息(默认日志级别)
- warn:警告,不影响使用,但需要注意的问题
- error:错误信息,级别较高的错误日志信息
- fatal:致命的,因为代码异常导致程序退出执行的事件
日志级别的顺序:
知道这个日志的级别之后,我们再来思考一下为什么只输出如图所示的三个.原因是SpringBoot的日志默认是info级的,只有等于或高于info级别的日志才能显示出来.也就是说我们改变它的这个默认日志级别就可以对日志进行过滤了.
为什么要对日志加以级别区分呢,很简单,就是为了在不同的环境下得到我们想要的日志信息.比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者的信息筛选时间。
接下来给大家看一下如何设置日志的级别.
在application.yml配置文件中设置如下:
这样就将日志级别设为debug级的了,也就是大于等于debug的都会被显示出来.我们来运行一下,看一下结果:
但是还有一点,这些信息确实是被显示出来了,但是还有一些SpringBoot自己的一些debug日志,如果我想过滤掉,只看自己写的,我们可以这样设置:
日志是默认在控制台输出的,是保存在内存上的,当我们重新运行项目时,之前的日志就没有了.然⽽在⽣产环境上我们需要将⽇志保存下来,这以便出现问题之后,我们可以追溯问题.就需要我们对日志进行持久化了.
想要将日志持久化,非常简单,只需要在配置文件中指定日志的存储目录或者是指定日志的保存文件名即可,这样Spring Boot会自动将控制台的日志写到相应的目录或文件下了.
像这样配置好之后,启动项目时,spring.log这个日志文件就会自动生成在你项目文件的根目录下.这样我们的日志就持久化成功了.当有新的日志生成时,是不会覆盖原来的日志信息的,而是会在后面叠加,如果日志越来越多,导致文件越来越大,别担心,它还会自动拆分的.
像这样配置好之后,启动项目时,Spring会自动在你的 D:\java-spring 这个目录下生成一个日志文件,文件名不需要自己命名,它会自己默认生成,如下图:
以上就是日志文件的持久化操作了.
好啦,到这里就结束啦,咱们下期见,拜拜~~