开发者学堂课程【SpringBoot快速掌握 - 核心技术:日志框架分类和选择】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/612/detail/9233
日志框架分类和选择
首先先通过一个小故事讲解一下日志的起源和日志框架的关系:
现在假设有一个开发人员 小张,小张每天晚上加班,在开发一个大型系统,由于这个系统有点大,每次为了调试方便都喜欢:
1、System
.out.println
(“”);
将关键数据打印在控制台。
有一天项目开发完毕后,老板说小张代码里System
.out.println
(“”)
是不是有点太多了,将它删除吧,那么小张一行一行的注释掉了,小张刚注释完,老板又说输出的还不错,能通过控制台输出了解项目运行状况将它写在一个文件里也方便以后监控一下所以:
2、用框架来记录系统的一些运行时信息;日志框架就出来了小张命名为zhanglogging
.jar
随着时代的进步,小张觉得这个日志框架功能有点简陋,突然想出了一些高大上的功能:
3、想在日志输出的时候过滤启用异步模式、自动归档等等,命名为zhanglogging
-
good
.jar
小张面临的问题又来了,他写了一个新的日志框架里面的一些设计可能跟以前的不一样所以:
4、将以前框架卸下,换上新的框架,重新修改之前相关的API;zhanglogging
-
prefect
.jar
每次都要做这个修改API有点麻烦,小张突然想到了一种模式:
5、JDBC-数据库驱动
现在写数据库都面向接口编程,只需要把数据库的实现放进去就行了这就是数据库的驱动,小张的日志框架为什么不这么设计呢?
所以小张为所有日志框架写了一个统一的接口层:日志门面(日志的一个抽象层);logging
-
abstract
.jar
以后进行编码的时候只面向logging
-
abstract
.jar
进行编程,而需要用到zhanglogging
-
good
.jar
还是zhanglogging
-
prefect
.jar
只需要
给项目中导入具体的日志实现就行了;
面向统一接口层进行开发,用什么就用日志实现就行了。
之前的日志框架都是实现的抽象层。
市面上的日志框架:
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....等等
这么多常用框架要用哪些?怎么用呢?首先来看一下它们的关系:
日志门面 |
日志实现 |
JCL ( Jakarta Commons Logging ) SLF4j ( Simple Logging Facade for Java ) jboss-logging |
Log4j JUL( java.util.logging )Log4j2 logback |
SpringBoot: 底层是 Spring 框架,Spring 框架默认是用 CL ;
SpringBoot 对它们进行包装,选用 SLF4J 和 logback;