日志是啥?
日志,我们打印出来的东西,或者程序自动打印出来的东西就叫做日志
有啥用?
日志,可以让我们快速定位到问题,知道哪里报错,哪里出现问题,也可以用来数据采集
日志的使用
程序一启动,就会打印日志,这里的日志,很明显和我们自己打印的日志是不一样的,很明显,日志打印出来的东西更加全面
日志的格式

时间,级别,进程的ID,应用名称,线程名称,类路径,日志内容
如何实现这种日志
使用springboot内置的框架slf4j


Logger这个类是内置在slf4j这个包之内的,获取日志对象是通过日志工厂获取的,需要传入一个参数,也就是这个日志的名称,一般我们使用这个类的名字

日志框架

Slf4j并不是并不是真的一个日志实现框架,他是把所有的日志实现整合一个统一的接口,无法单独使用,需要和具体的日志框架结合使用
门面模式/外观模式

说人话就是,门面系统提供了一个统一的接口,可以用来访问子系统的一群接口
举例子
假设你现在要关灯,你可以选择一个个灯去关掉,或者直接就关掉总开关
优点:解耦,减少依赖
灵活,不需要关系子系统是怎么实现的,只需要知道怎么交互就行
安全,子系统不给你提供接口,你就只能访问子系统提供的接口
为什么要引入日志门面?
因为日志门面实现了统一的接口,只需要维护这一个即可,之前的日志框架底层可能存在冲突,比如jar包不同,就会导致程序出错
日志的级别

默认的打印级别为info级别

从这里可以看出来,fatal是没有提供方法的,因为使用fatal就说明挂了都,然后debug和trace无法打印出来,这个是因为默认的打印级别是info,可以在配置文件修改
修改默认日志级别

在yml配置文件中是这logging.level.root即可
日志持久化
每次程序启动或者程序结束,就会清除掉日志,为了把日志保存下来,我们可以存储日志
语法
Logging.file.path
Name
不指定盘符,就会默认在当前文件所在的位置创建一个文件,名字自己指定,指定盘符和名字就会按照你的定义来

Path
只能指定存储的位置,无法指定名称,名称固定是spring.log


优先级
如果同时存在name和path,就会以name为主,path报废


Path和name的区别
Name可以指定名字和路径,优先级更高
Path只能指定路径,名字默认是spring.log
日志的分割
只要项目运行的够久,name日志就会很大,我们如果需要其中的某些日志,不可能在一个超级大的文件中找,不亚于大海捞针,所以我们就需要对日志进行分割
语法

Max-file-size,最大的日志大小
File-name-pattern文件的命名规则:日志名,日期,索引

按照自己的需求,可以对日志进行分割,需要注意这里的最大日志不是准确数,是按行数来的,会把这一行打印完才会结束
配置日志的格式
自带我感觉还挺好看的,我不推荐换
语法
控制台和文件

%d表示日期格式,c是类的全限定名,M是方法名字L是行号thread是线程的名字
使用注解输出日志
@slf4j
前提是需要导入了lombok依赖

使用slf4j就会帮我们默认生成一个
private static final Logger logger = LoggerFactory.getLogger(类名);
设置控制台颜色
打开edit configuration

打开motify

然后点击vm接着在窗口输入
-Dspring.output.ansi.enabled=ALWAYS
重启即可
