SpringBoot 日志
今天我们来学习日志,日志是啥玩意呢,其实我们之前使用过超简易版的日志,就是打印,我感觉大家应该都一样,使用打印来检查代码是不是执行到这里了,通过控制台打印的日志来发现问题,排查问题,但是随着我们的项目越来越大,日志有了更多的用途;
1,日志用途
1)系统监控
系统监控是一个程序系统的标配,会监控每个方法响应,运行的时间,一旦发生异常,超过阈值就会报警;
2)数据采集
这个是我们会把日志进行持久化,之后把这些数据交给大数据专业的人来处理,具体嘎哈呢,来猜你喜欢,比如你刷一个美女视频,你看了好几遍,接下来他就会根据这个日志给你疯狂的推送美女了;哈哈哈哈哈哈;
3)日志审计
这个就涉及到安全方面了,比如你干了些违法的事情,日志中是都有的,来保证一定的安全性,就比如有人删库跑路,维修人员也能根据日志来恢复数据库;
2,打印日志
我们来看看直接使用System.out.println(),和打印日志的区别:
我们看到我们打印的日志缺少了一堆东西,
Spring打的日志有时间,级别,进程ID,线程名,Logger名(源代码类名),日志内容,下面我们来看看Spring是怎么打印日志的:
@RequestMapping("/Logger2")public void Logger2(){Logger logger = LoggerFactory.getLogger(LoggerController.class);logger.info("Logger2方法打印日志");}
这里的Logger要选择SLF4J的,
我们看看我们打印的日志:
跟Spring的是一样的;
3,日志框架-门面模式
其实这个SLF4J很类似门面模式,日志的打印方式有很多,log4j,JUL,Logback,这些都是能够打印日志的,但是他们之间的配置文件是会发生冲突的,程序员们之前还要去解决配置文件的问题,很麻烦,但是出现了SLF4J就相当于出现了一个统一的遥控器,来控制这几个打印日志的东西,就不会涉及到配置文件的问题了;这就像门面模式的设计模式,我们之前还学过单例模式和工厂模式;
门面模式就是有三个功能的方法,我们创建了一个统一接口能够调用他们几个;
SLF4J就是其他日志框架的门面;
4,SLF4J框架介绍
就是其他日志框架的门面,我们比如要使用log4j,SLF4J就会把log4j的配置文件加载进去,我们就可以使用了;
5,日志格式的说明
1)时间
2)级别
3)进程ID
4)线程名
5)Logger日志名(源代码类名)
这里都简写了,就有首字母
6)日志内容
6,日志级别
日志的级别从高到低依次为:FATAL,ERROR,WARN,INFO,DEBUG,TRACE
FATAL:致命错误,通常是没有这个日志信息了,你都致命了还看什么日志呢
ERROR:错误信息,级别较高的错误信息,不影响系统的继续运行
WARN:警告信息,不影响使用,但需要注意的问题
INFO:普通信息,用于记录应用程序正常运行时的信息,比如启动完成,请求处理完成
DEBUG:调试信息,需要调试等待时候关键信息打印
TRACE:追踪信息,比DEBUG更细粒度的信息(除非有特殊用意,否则使用DEBUG替代)
@RequestMapping("/Logger3")public void Logger3(){logger.trace("trace日志");logger.debug("debug日志");logger.info("info日志");logger.warn("warn日志");logger.error("error日志");}
我们来看看,
只打印了三个日志,那两个日志哪去了,这就要设计到日志的配置了,为啥看不到呢,我们可以来一个例子嗷,假如你是大老板,你需要知道公司的运营情况和一些重大事件,那计算机部门的张三今天吃榴莲了好难闻需要跟你汇报吗,就是这个道理,但是我们说我老板就是闲,我就要知道也不是不可以,我们修改配置文件就行了;
7,日志配置
1)级别
我们先来学习配置日志的级别,我们就使用YML了嗷,还是喜欢用YML:
logging:level:root: trace
现在再来重新打印一下:
这个就不演示了,,,,,我启动了好久DEBUG都没打印完;
2)持久化
有两个方法:
1)配置日志的文件名
logging:file:name: Logger/SpringLogger.log
这样我们的日志文件就存到这里了;
2)配置日志的存储目录
logging:file:path: C:\Spring日志
这种方法创建的话名字是固定的:
这两种方式是冲突的,如果两种都存在会以name为准;
3)分割
logging:logback:rollingpolicy:max-file-size: 10KBfile-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
这样就是以10kb来分割日志:
我们这样就把日志分割成了两部分;
4)格式
具体看板书
8,更简单的打印日志方式
有更简单的日志打印方式就是使用注解来进行打印,@SLF4J,完了直接使用log.info,我们需要添加lombok依赖:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version> </dependency>
@RequestMapping("/Logger")
@RestController
@Slf4j
public class LoggerController {private static final Logger logger = LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/Logger1")public void Logger1(){System.out.println("打印日志");}@RequestMapping("/Logger2")public void Logger2(){logger.info("Logger2方法打印日志");}@RequestMapping("/Logger3")public void Logger3(){logger.trace("trace日志");logger.debug("debug日志");logger.info("info日志");logger.warn("warn日志");logger.error("error日志");}@RequestMapping("/Logger4")public void Logger4(){log.info("使用注解打印日志");}}