目录
①先得到日志对象(slf4j的Logger对象) 编辑
为什么@Slf4j可以自动生成这样的一个log对象呢?(lombok的实现原理)
一、日志有什么作用
日志是程序的重要组成部分,如果程序报错了,不打开控制台查看日志,那么很难找到问题的所在地方。
作用1:快速定位问题的所在之处(最主要)
因此,日志有一个很重要的作用,那就是:方便快速定位问题的所在之处。
当程序在线上运行的时候出现了bug,那就需要首先查看日志来锁定bug。
作用2:记录用户的登录日志
假如当某一个用户一天之内的登录次数达到了几万次,那么就需要通过日志来记录这一个用户的非法登录行为,判定用户是正常登录还是恶意的破解
作用3:记录系统的操作日志
方便数据恢复和定位操作人。
作用4:记录方法的执行时间
记录到具体的方法执行的时间,方便为以后优化程序提供数据支持。
二、日志怎样使用
①先得到日志对象(slf4j的Logger对象)
②根据日志等级来输出日志内容
public void sayHi(){
//各个级别的日志输出
logger.info("I am info");
logger.debug("I am debug");
logger.warn("我是 warn");
logger.error("我是 error");
}
三、日志的级别(由低到高:6个)
有哪些级别:
trace
少许的日志,这一个是最低的级别。
debug
这个级别用于"调试"的级别
info
这个级别是普通的日志信息。(如果不指定日志的级别,那么默认就是这个)
warn
警告日志:有一些地方存在警告的风险的,就需要使用到这个warn级别的日志
error
错误级别的日志,如果发生了一些错误,那么就需要使用这个级别来记录。
fatal
发生了比较致命的情况,需要由系统来进行输出,不可以由用户手动进行debug输出。
日志的级别规则:
规则1:越往上收到的消息就越少,出现的频率就越低。
规则2:当设置了一个级别之后,只有比这个级别及其更高的日志级别才可以输出,否则不可以输出。
日志的级别设置:
全局日志(作用于整个项目):
需要在application.properties这一个配置文件当中进行日志等级的设置。
可以设置为:trace、debug、info、warning、error、fatal
然后启动一下springBoot项目:
设置局部日志(指定某一个类)
需要使用:logging.level.类的路径
需要注意的是:当局部日志和全局日志冲突的时候,一般情况下以局部日志的为标准。
局部日志的优先级>全局日志的级别。
日志的持久化(保存到磁盘)
持久化的方式1:设置保存路径
在配置文件中需要设置日志的保存路径,当设置了保存的路径之后,那么日志就会自动持久化。
注意事项:
配置文件当中不可以使用\D这样的"\"的方式来进行路径的指明。
要改成:"/"的方式
这样子,只要项目一启动,那么就会在E:/demo4/log这个位置多出来一个文件夹log,然后会在这个log文件夹下面多一个配置文件出来。
如果真的想改成"\"的形式来进行保存,那么就需要使用到转义:
持久化方式2:设置日志的保存名称
在配置文件当中设置日志的保存名称,那么日志也会自动进行保存。
然后就可以在对应的路径下面看到这一个日志了:
更加简易的添加日志的方式:添加lombok
第一步:需要安装插件(EditStarters)
第二步:添加注解@Slf4j
代码实现:
/**
* @author 25043
*/
@Controller
@ResponseBody
@RequestMapping("/user")
@Slf4j
public class UserController {
@RequestMapping("/sayHi2")
public void sayHi2(){
log.info("I am info");
log.error("I am debug");
log.warn("我是warn");
log.error("我是error");
}
}
为什么@Slf4j可以自动生成这样的一个log对象呢?(lombok的实现原理)
在编译时期,@Slf4j会为当前类当中设置一个静态从常量属性,这一个属性就是log
通过查看UserController编译之后的.class文件,可以看到这个属性。
UserController的字节码(.class文件)
lombok有哪些注解(一览)
@Data注解:
这些注解的原理,就是在编译时期添加对应的方法