目录
日志的作用
SpringBoot中的日志
框架说明
日志对象的获取
日志的分类
日志的级别设置
日志的打印
日志的持久化
日志的作用
- 日志可以帮助我们发现程序的问题并进行定位.
- 日志还可以记录用户的登录信息,分析用户的意图.
- 日志能记录程序执行的时间,记录数据.为日后的程序优化提供数据支持.
SpringBoot中的日志
在SpringBoot中,内置的日志的框架(SLF4J + logback).
框架说明
slf4j是日志的门面,而logback是日志的实现.由程序员来调用slf4j来去控制logback的实现.
为什么要有一个日志门面,而不是直接调用logback呢?
答案是:为了解耦.日志门面可以帮助我们去对接不同的日志实现框架.在项目中的代码,我们只要调用slf4j的对象与使用其方法就好了.我们可以并不用去关心底层日志的实现,如果当项目想要替换一个日志的实现框架时也不会影响到项目的代码,因为我们调用的一直是日志的门面而不是日志实现的本身.
日志对象的获取
在程序中想要打印日志,首要获取日志门面(SLF4J)的日志工厂对象.
springboot中已经内置了,我们直接调用就好.不需要额外添加依赖了.
//Logger为slf4j
private static Logger logger = LoggerFactory.getLogger(User.class);//参数为类
日志工厂在得到日志对象时需要将类名传输进去,这样才能定位到日志是由哪一个类进行发送的.
日志的分类
日志根据优先级被分成六大类,分别是(优先级由1-6递增):
- trace:微量,少许的意思,级别最低;
- debug:需要调试时候的关键信息打印;
- info:普通的打印信息(默认⽇志级别);
- warn:警告,不影响使⽤,但需要注意的问题;
- error:错误信息,级别较⾼的错误⽇志信息;
- fatal:致命的,因为代码异常导致程序退出执⾏的事件
日志的级别有什么用呢?
日志只会打印比目前级别大与包括其本身的日志类型.
例如,目前的级别为info,则日志只会打印info,warn,error,fatal级别类型的日志.
因为一个项目中的日志信息是非常多的,这样分类能够更好的让程序员排查出所需的信息.
日志的级别设置
我们可以在项目的配置文件中设置日志的优先级.
笼统的方式,root表示整个项目
logging.level.root=fatal #将日志的级别设置成faftal
在同一个项目的不同类下设置不同的级别为:
#根据路径找到类来设置级别
logging.level.com.example.demo.User=error
logging.level.com.example.demo.Student=warn
但在slf4j中只支持设置四个等级,error,warn,info与debug.
像这里设置了fatal,但还是会打印error等级
日志的打印
方法一:
我们只要调用slf4j的Logger对象就好了
@Controller
public class Log {
//Logger为slf4j
private static Logger logger = LoggerFactory.getLogger(User.class);
@PostConstruct
public static void getLogger() {
logger.error("救命啊这是个错误!");
logger.info("啊啊啊啊");
logger.trace("我是trace");
}
}
方法二:
搭配Lombok框架与@Slf4j注解来使用.
直接使用log对象,log对象是由Lombok提供的特定对象名,只能使用log.
@Slf4j
public class Log {
@PostConstruct
public static void getLogger() {
log.error("我是lombok搭配@slf4j标签实现的");
}
}
我们可以在targe下查看.class文件中的代码,就可以发现是lombook自动为我们创建了当前类下的logger对象
日志的持久化
上面我们日志的输出都是在idea的控制台上,当重启一遍服务器,日志就都会被清空了.
所以日志的持久化也是很重要的.
只要在配置文件中配置日志的路径与文件名即可.
logging.file.path=D:\\JAVA-home\\logs
logging.file.name=spring-test.log
就可以将日志以log的形式存储到计算机中.
日志存储成一个文件最大的内存限制为10MB,只要大于10MB就会生成一个新的日志文件来存储日志.