申明本文不是讲解什么日志原理,只是记录一些相关信息,让小弟清楚在选择日志框架的时候清楚一点为什么,怎么搭配。
以前项目中配置日志都是稀里糊涂的,要什么jar包或者是需要什么maven依赖,以及相关的配置都是在网上抄,至于为什么要这些jar和依赖根本不清楚,最近在项目中遇到了关于日志的问题,刚好也无意间看到了相关的信息,所以记录下来。
现在市面上的日志框架还是有点小多(这也是小弟最近才知道的),我曾经一直以为只有 slf4j,然后其他都是基于此的实现,现在才明白不是,目前市面的上日志框架常用的大致有 slf4j,logback,log4j,log4j2,JUL,JCL,JBoss-logging,common-logging等等,但是一些是接口,一些是实现,来个表区分一下
接口 | JCL, SLF4J, JBoss-logging |
实现 | log4j, log4j2, logback, JUL... |
过后就是 log4j,slf4j 和 logback 是出于同一人之手,但是在log4j出世时,并没有slf4j,所以log4j 是没有基于slf4j实现的,logback是log4j 的改进版,它在slf4j 之后出现,所以是 基于slf4j 实现的。
至于其他的log 框架,可以认为是slf4j的竞争对手,或者说大部分其实是在slf4j出现之前就有的,所以那时候别人根本不知道有slf4j,就更不会基于slf4j去实现了。举个例子,以前在项目中用的 日志框架都是 log4j ,但是 log4j 并没有基于slf4j实现,但是我们有要用slf4j,怎么处理的?在配置依赖的时候,除了配置 slf4j 和 log4j,还一定配置了另一个 log4j-log412 的依赖,这个log4j-log412 就是slf4j 和 log4j 的桥接包,把两个不相干的日志框架桥接在一起,以便于我们使用。log4j-log412 jar包主要就是 实现了 slf4j 里面的接口,但是接口里调用的却是 log4j 的方法。其他的框架也是一个道理,如果不是基于slf4j 实现的,必定有一个中间包来连接它与slf4j 。如图
这张图是小弟从 slf4j 官网盗出来的,应该不难看出,第三列 SLF4J bound to log4j,就是小弟上面的所说的那个例子,到此是不是就清楚,以前稀里糊涂在网上拷贝的东西(也许还是错的)是怎么来的了,以后也不用稀里糊涂的拷贝了,清楚原因以后,可以很清楚的知道想要什么或者不要什么。
除此之外,小弟还从SLF4J 的官网里盗了另一张图,是用来解决不同框架中,不同日志框架要使用slf4j的问题,如果能理解上面的例子,应该也不难理解怎么处理,大致的流程就是 排除掉原有框架的日志实现包,然后导入相关 中间包 来桥接 slf4j 就可以了。
最后,要了解更多,建议大家多去官网看看,毕竟现在翻译软件都很强,应该还是不难看懂的。