为什么 slf4j 被推荐使用

参考文章:
Simplifying the distinction between SL4J and commons logging

日志那点事儿——slf4j源码剖析
slf4j门面模式实现原理

SLF4J 与 CommonsLogging 原理对比

在这里插入图片描述

SLF4J 工作原理

如上图示意

  • slf4j 会在 classpath 中进行扫描, 寻找可用于 slf4j 绑定的日志实现类库
    • 如果只找到一个可用于绑定的日志类库, 就会正常进行绑定, 在运行过程中, 将所有面向 slf4j 的调用翻译为对应的日志实现类库调用
    • 如果存在多个可用于绑定日志类库, 就会提示报错

Commons Logging工作原理

如上图示意

  • Commons Logging 有一个神奇的逻辑层, 会首先去尝试在 commons-logging.properties 配置文件中查找是否已经设置了 org.apache.commons.logging.log property 这一属性 或者在应用内存中查找是否已经通过 Commons Logging API 设置过这一属性。
    • 如果找到, 则用 Commons Logging 的日志实现类
    • 如果没找到, 在 classPath 中查找是否有 log4j 实现, 有则使用
    • 如果还没找到, 直接尝试用 JDK1.4 以上的内置日志实现
    • 如果JDK 低于1.4, 则 使用 CommonsLog 中的SimpleLog 实现

优劣对比

SLF4J 的优点在于其策略足够简单, 在拥有maven, gradle 等此类依赖管理工具时, 我们可以很方便的确定, 最终日志的实现

Common Logging 的优点在于当类路径中存在多个日志实现库(jar)时 , 它有一个确定的规则最终选出一个实现类, 而不会因为多个实现类库的共同存在而报错无法完成绑定

由于目前maven, gradle 等构件工具完全可以高效清晰地帮助我们管理项目的依赖, SLF4J 在绑定策略的简单性上,给我们减少了很多出错的可能, 以及查错的成本, 综合来看, SLF4J 以期简单的特定更容易被广泛使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章