SpringBoot学习之路---日志框架前世今生及SpringBoot的选用

我们在软件开发的时候总要去跟踪记录些东西,来观察一些变量在程序中的变化



日志框架的由来:

这里先讲个小故事:

小明是一名程序猿,有一天,他奉命开发一个大型系统,因此需要实时地观察程序的运行情况。

  1. 刚开始小明使用System.out.println();语句来直接打印出变量的情况,小明在每个变量使用之后都打印一遍。
  2. 终于系统开发完了,这时老板说:“控制台太多和项目无关的东西了,我只想要控制台干干净净的”,于是苦逼的小明只能一条一条的注释去了…
  3. 终于搞定了,
    老板又来了一句:“之前那个好像挺不错的,还可以实时地监控程序的状况,你再加上吧”。
    小明心里苦呀,想着谁让你是老板呢?于是这次小明想着不如我封装起来吧,下次如果需求改变的话,我这边修改也很方便。
    于是小明开发出了一个框架xiaomingLogging.jar
  4. 终于完成了,小明以后开发别的项目也用着这个框架,但是小明他用着不舒服呀,他决定给这个日志框架加上几个高大上的功能。比如异步模式? 自动归档? 等等? 于是xiaomingLogging_good.jar问世了
  5. 这时小明想要把之前写的项目都用上新的框架,但是要修改原先的调用API,唉,也是个苦命活。改好之后,小明想着“我能不能抽取出来一个抽象层,这样以后面向接口编程,我就不用改动源码了?”
  6. 说干就干,xiaomingLogging_abstract.jar问世了,小明规定,以后的日志框架都实现这个抽象层,这样以后如果框架更新就不用去改动源码了!我们只需要给项目导入具体的日志实现类即可。

市面上的日志技术

故事到这里结束了,市面上就诞生了许许多多的日志技术。有一个非常受欢迎的日志抽象层,就是 slf4j,别的日志抽象层也有,比如JCLjboss-logging等等。但我们使用sfj4j比较多。

日志实现技术有log4j,log4j2,logback,jul等等log4j因为前期设计有点小问题,后面新开发出了logback,而log4j也是在log4j的基础上升级的,但就是因为太前卫了,所以比较难适配,jul因为出现的比较早,并没有实现sfl4jlog4j也是一样,所以现在使用logback比较多。


slf4j来管理日志

因为log4j,jul等许许多多的日志实现类比slf4j先问世的,所以它们并没有实现slf4j

这个时候只能小辈slf4j来作出一些妥协了,我们去看slf4j的官网,可以在官网上看到一张图:
在这里插入图片描述
我们可以看第三四列,slf4j为我们提供了一个适配的jar包,它可以连接log4和slf4j,有了他我们就可以使用以前的日志实现类了。

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法。

但是这里有个遗留问题,SpringBoot的日志实现类使用logback,而Spring使用log4j,hibernate却使用jboss-logging作为规范,它们之间并不统一,别担心,slf4j早就为我们搞定了:
在这里插入图片描述
看图,可以看出slf4j先是把其他框架所要用到的jar用中间包替换掉,而中间包其实还是调用slf4j抽象层的方法,所以就完成了统一。

如何让系统中所有的日志都统一到slf4j;

1、将系统中其他日志框架先排除出去;

2、用中间包来替换原有的日志框架;

3、我们导入slf4j其他的实现


SpringBoot的决定

SpringBoot也是选用slf4j+logback来管理日志。

每个启动器里面都依赖一个坐标

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</dependency>

我们点开maven的依赖图
在这里插入图片描述
可以看到logging底层也是使用slf4j+logback的技术,并导入了log4j-to-slf4j+jul-to-slf4j这些中间适配jar包,保证能够完成日志技术的统一。

关于SpringBoot怎么具体使用日志框架开操作,会在下一篇博客介绍.

发布了27 篇原创文章 · 获赞 34 · 访问量 6108

猜你喜欢

转载自blog.csdn.net/Jokeronee/article/details/105026256