关于日志框架的一点总结

前言:回想自己学习过程中,碰到过很多日志框架,如log4j ,、Jboss-logging,commons-logging…所有特此来记录一下他们之间的关系。

其实日志框架,有点像JDBC 与数据库驱动一样,分为接口和具体的实现。日志框架的接口也叫日志门面,当我们使用框架的时候,就是调用日志门面的方法,具体的实现就是交给日志门面来做。现在对常见的日志框架进行分类。

日志门面 (日志的抽象层)日志实现
JCL(Jakarta Commons Logging) , SLF4j(Simple Logging Facade for Java) , jboss-loggingLog4j , JUL(java.util.logging), Log4j2 ,Logback

其中JCL是Spring底层使用的日志框架,但是现在已经停止更新了所以不推荐使用。所以我们一般采用SLF4j作为日志门面。
那么SLF4j作为日志门面的话,该如何与众多日志实现框架绑定使用呢。借用官网的一张图
在这里插入图片描述
要注意的地方是当SLF4J绑定log4j使用的时候,由于log4j出现的比较早,后来才出现的SLF4J,log4j的实现没有考虑SLF4J这套日志门面规范。所以中间要加一个适配层slf4j-log412.jar来连接SLF4Jlog4j。其中过程是,在slf4j-log412.jar中实现SLF4J的api,但是的实现的时候调用确是log4j的方法。
同样SLF4JJUL配合使用的时候,要添加`slf4j-jdk14.jar这个中间适配层。


面对一个现状,Spring(commons-logging)、Hibernate(jboss-logging)、xxxxx,等不同框架使用不同的日志,那么我们该如何统一日志的使用呢。
因为我们知道SLF4J这个简单的日志门面,可以通过适配器,与不同的日志实现整合。那么我们把所有的日志门面都换成,SLF4J 是不是就能够统一日志了呢。但是这样也会存在问题,如:Spring底层使用的是commons-logging,当我们去除它,换成SLF4J后,程序都会无法运行。所有这个时候我们又需要一个中间包jcl-over-slf4j.jarcommons-logging去除,换成jcl-over-slf4j.jar。变可以实现
更多的转换如下图:
在这里插入图片描述
我们来看一下jcl-over-slf4j.jar是如何偷梁换柱的。
在这里插入图片描述
我们可以看到jcl-over-slf4j.jar这个jar包里面其实包名叫commons.loging这就是为什么,添加这个包之后,去除spring底层的commons.loging,还不会报错。然后LogFactory logFactory = new SLF4JLogFactory();实例化的是new SLF4JLogFactory(); 使用的是SLF4J,这样偷梁换柱的效果就达到啦。
其他几个中间包也是这种方式偷梁换柱。

总结:

  • 推荐使用:slf4j(门面)+logback(实现) [logback是因为log4j的开发者觉得log4j不住,而开发出来跟slf4j适配的]
  • 如何让系统中所有的日志都统一到slf4j;
    1、将系统中其他日志框架先排除出去 如:(排除spring的commons-loging);
    2、用中间包来替换原有的日志框架 如:(jcl-over-slf4j.jar);
    3、我们导入slf4j其他的实现。如(logback-class.jar+logback-core.jar)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值