Ⅷ.Spring Boot与日志
日志的使用包括日志门面(抽象层)和日志实现。我们在使用的时候只需要调用日志门面即可。我们这里选用日志门面(抽象层):slf4j和日志实现:logback来进行讲解。在日志使用的时候不用考虑日志实现,只需要考虑日志的实现就可以了。
1.日志门面slf4j与日志实现logback的使用
在官网上,我们可以看到slf4j的使用,slf4j用户手册。
1 | import org.slf4j.Logger; |
slf4j和logback使用方法:
在使用slf4j和logback时,需要在系统中导入slf4j的jar包和logback的实现jar。
2.日志门面slf4j与其他日志实现方法的使用
如果想使用日志门面slf4j与其他日志实现的时候,可以参考官方给出的这张图片。
从图中可以看到,第二行绿色方框所代表是为日志门面slf4j,只要是使用使用slf4j,日志门面就一定不会改变。在第三行里,蓝色为日志实现,由于一些日志实现出现的时候比较早,没有考虑到slf4j的出生,所有要使用灰色的日志实现需要淡绿色的适应层来适应。在第四行里,是早于slf4j出现的日志实现。
在第一列中,由于只使用日志门面而没有采用日志方法,则日志记录后输出到一个空的位置。正确的用法应该是第二列,日志使用日志门面后选择不同的日志实现进行输出。第三和第四咧都是使用早于slf4j出现的日志实现,所以需要有适应层的存在。第五列是使用slf4j提供的简单的日志实现。第六列是导入slf4j提供的没有什么操作的日志实现。
每一个日志实现都有不同的配置文件,slf4j根据不同日志实现进行不同的配置。
3.转换其他日志门面统一为slf4j的方法
由于不同的框架在使用日志文件时采用不同的日志门面,类似spring使用commons-logging的日志门面,hibernate使用jboss-logging,mybatis使用不一样的日志门面,所有需要统一为一个指定的日志门面。
这里我们将不同的日志门面转化统一为slf4j。
首先先注意左上角的子图,在左边的一个竖列是正常使用的slf4j和logback的方式。在右侧的那些方框是指使用了别的日志门面的方式。如果直接想替换成slf4j的方式的话,需要把依赖删除后,加入方框左下角提醒的jar,尚硅谷的雷丰阳老师称为偷天换日包,狸猫换太子包,也就是两个不同的包,前者有什么类,后者也有相同的类名,这样子就不会出错了。后者也有相同的类指向slf4j,再由slf4j指向日志实现。 右上角的子图和左下角的子图都是在使用优先slf4j出现之前的日志实现时需要要做的事情,其实跟上者没什么区别,只是在日志门面与日志实现之间增加了一个适应层而已。
4.日志实战使用
springboot的日志在项目创建的时候就已经自动配置好了。下列展示日常中常用的日志的使用方式。
1 | package com.myblog.springboot; |
5.日志的配置
上一节我们已经使用了日志的配置之一,也就是设置日志的输出等级,接下来说明logging.file和logging.path的区别,同样的,这两个的配置也是在配置文件中进行配置。
| logging.file | logging.path | Example | Description |
|---|---|---|---|
| (none) | (none) | 只在控制台输出 | |
| 指定文件夹 | (none) | my.log | 输出日志到my.log文件 |
| (none) | 指定目录 | my.log | 输出到指定目录的spring.log【名字是官方定义的】文件中 |
如果logging.file和logging.path都没有指定的情况下,指定输出日志在工作台中。 如果是使用logging.file不使用logging.path的话,会在工程路径下生成指定名字的log文件【例如logging.file=springboot.log】,也可以通过指定路径的方式进行生成【例如logging.file=E:/springboot.log】 logging.file和logging.path是互相矛盾的,一般不混合使用,即使同时出现,也只会设置logging.file中的内容。logging.path里指定目录,而不考虑文件名,因为文件名是官方已经给出的名字【例如/spring/log,是指在工程所在的目录下新建spring文件夹,里再新建log文件夹,把日志文件写在spring.log并保存,注意/是绝对路径./是相对路径,在idea的工程里是看不到的,因为是工程同个目录下】

