对 SLF4J 的一点理解

以下内容主要参考 SLF4J FAQ 文档。只用于记录我的一点理解,如有必要请仔细阅读 FAQ 文档。

 

1. 什么是 SLF4J? 

 

SLF4J is a simple facade for logging systems allowing the end-user to plug-in the desired logging system at deployment time.

 

要理解这句话需要先弄懂几个概念:

 

  1. facade. 它实际上是 GoF 设计模式中的 Facade 模式,中文是外观模式。该模式通过一个 Facade 对象为一系列复杂的对象提供简化的接口。SLF4J 为复杂的 logging system 提供了简单一致的接口。
  2. logging system. SLF4J 封装的 logging systems 实现有 log4j 1.2,jdk 1.4 logging 等,使用 SLF4J 必须绑定其中的一种 logging 实现,这种绑定关系以 SLF4J bindings 的形式存在。
  3. plug-in at deployment time. SLF4J 支持在部署时将与之绑定的 logging 实现替换为另一种实现,只需要替换一下 SLF4J binding 的 jar 以及所以赖的具体 logging 实现的 jar。

SLF4J 提供的接口封装在 slf4j-api.jar 里。另外,SLF4J 还提供了 5 种 binding:slf4j-nop, slf4j-simple, slf4j-log4j12, slf4j-jdk14 和 logback-classic,每一种 binding 对应了一个 jar。在 SLF4J 的每一个版本的发行包中包括了 slf4j-api.jar 以及 5 种 binding 的 jar。

 

从 SLF4J 使用者的角度看,slf4j-api 是 backward compatible(向后兼容)的,这种兼容意味着当你使用任何版本的 slf4j-api 都可以成功通过编译。但也只是仅此而已,因为你使用 SLF4J 不只是使用 slf4j-api 这一个jar,SLF4J 发行包里的其它 binding jar 对 slf4j-api.jar 的版本存在依赖。对 binding jar 和 slf4j-api.jar 不同版本号的混合使用可能会导致意想不到的错误,因为不同版本的实现存在差异。

 

2. 什么时候应该考虑使用 SLF4J?

 

由于 SLF4J 为不同的 logging 实现提供了统一的接口,在工程里使用 SLF4J 的好处是:你不必依赖于某个特定的 logging 实现的接口,当你需要换一种 logging 的实现时,只需要简单的替换几个 jar 包,而无须修改散布在代码各处的 logging 接口调用。当然,这种应用场景可能并不常见。对于独立的应用来说,当选用了一种 logging 实现后,很少会去考虑替换为另一种 logging 实现。并且,在独立应用里,即使使用了 SLF4J,也需要调用底层的 logging 实现去完成基本的 logging 操作,毕竟 SLF4J 只是一个 facade。所以,对于独立应用而言,一般不需要使用 SLF4J。

 

SLF4J 这种将统一接口与具体 logging 实现解耦的方式给 API libary 的设计带来的好处是最为明显的。因为,如此一来,API 的最终使用者可以灵活的选用适合自己的底层 logging 实现,要做的也只是引入 SLF4J 的某个 binding jar 而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值