`
wxl24life
  • 浏览: 293548 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对 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 而已。

分享到:
评论

相关推荐

    Spring Boot中slf4j日志依赖关系示例详解

    SLF4J(Simple Logging Facade for Java)是一个用于日志记录的抽象层,它允许用户在运行时绑定不同的日志实现,如Logback、Log4j等。Spring Boot默认集成了SLF4J和Logback作为其日志系统。 首先,让我们了解Spring...

    log4j所依赖jar包

    随着安全问题的日益重视,Log4j的最新版本(如Log4j 2)对安全性进行了加强,修复了多个已知漏洞,因此,保持日志库的更新至关重要,以防止潜在的安全风险。 总的来说,这个压缩包为Java开发者提供了一个方便的集合...

    log jar 包

    3. **Simple Logging Facade for Java (SLF4J)**: SLF4J是一个抽象层,为各种日志框架提供一个统一的接口,如Log4j、Logback等。它的目的是使用户能够在部署时自由选择底层的日志实现,而无需修改代码。SLF4J API...

    hibernate的一点总结

    `slf4j`和`log4j`则是日志服务相关的库。 配置数据库访问信息通常在`hibernate.cfg.xml`中进行,包括显示SQL语句、格式化SQL、以及自动创建或删除表的设置。例如,`<property name="hibernate.show_sql">true...

    基于注解的轻量级java流程跟踪工具.zip

    这可能包括标准的Java日志框架,如Log4j、SLF4J或Java内置的日志API。 4. 用户界面:如果有的话,可能还包括一个可视化的用户界面,用于实时展示和分析跟踪数据,帮助开发者更直观地理解程序运行情况。 在压缩包...

    OServer.rar_Help!

    Java的log4j、slf4j等日志库可以帮助实现这一点。源代码中应能找到相关的日志输出语句。 9. **安全考虑**:服务器软件需要保护自己免受攻击,例如防止SQL注入、XSS攻击等。开发者可能已经实施了相关的安全措施,如...

    《自己动手写网络爬虫》第四章代码

    - 日志记录(如Log4j, SLF4J)有助于调试和监控爬虫运行状态。 9. **实战项目**: - 通过实际编写爬虫项目,学习如何将上述理论知识应用到实践中,解决具体问题。 这些知识点是第四章代码的重点,读者通过学习和...

    [搜索链接]Java网络爬虫(蜘蛛)源码_zhizhu.rar

    Java中的Log4j或slf4j可以帮助实现这一功能。 通过分析【搜索链接]Java网络爬虫(蜘蛛)源码_zhizhu】这个项目,你可以深入了解上述各个知识点的实际应用,并从中学习如何构建一个完整的网络爬虫。这个源码不仅可以...

    JAVA火车售票系统

    9. **日志记录**:为了追踪系统运行状态和调试问题,系统应记录操作日志,JAVA的Log4j或SLF4J等库可以帮助实现这一点。 10. **单元测试**:为了确保代码的质量,开发者应该编写单元测试,使用JUnit等工具对各个功能...

    一个小型的日志功能模块

    在Java中,常见的日志框架如Log4j、SLF4J(Simple Logging Facade for Java)和Java内置的`java.util.logging.Logger`可以提供基础的日志功能。这个小型日志模块可能借鉴了这些框架的设计思想,也可能有其独特的...

    javaweb物流配货项目源码(实用).zip

    8. **异常处理和日志记录**:良好的异常处理和日志记录对于排查问题和系统监控至关重要,项目中会看到如何使用try-catch语句和日志库(如Log4j、SLF4J)来实现这一点。 9. **测试和调试**:为了确保代码质量,项目...

    SSH(Spring+sturts+Hibernate)框架所需的ja包

    5. 其他依赖库:例如log4j或slf4j的日志框架,commons-lang、commons-fileupload等Apache Commons组件,还有一些通用的JSON库如json-lib或Jackson。 在配置SSH框架时,通常需要完成以下步骤: 1. 引入相关jar包到...

    Hibernate核心API

    - `slf4j-log4j12.jar`:日志实现。 - `log4j.jar`:日志框架实现。 - `cglib-nodep.jar`:用于动态代理。 - `javassist.jar`:用于字节码工程。 - `jboss-logging.jar`:日志支持库。 以上就是关于Hibernate核心...

    Java爬虫技术,无视频,图文教程

    使用如SLF4J或Log4j的日志框架是常见的做法。 8. **法律与道德规范**:进行网络爬虫时,务必遵守相关法律法规和网站的Robots协议,尊重网站的数据所有权和隐私政策,避免对目标网站造成过大的访问压力。 这个图文...

    JAVA中间接口转发DEMO

    Java的日志框架如Log4j或SLF4J可以帮助我们实现这一点。 总结,这个"JAVA中间接口转发DEMO"涵盖了Java中间层开发的核心概念,包括异常处理、重试、缓存、数据转换、负载均衡、熔断降级策略以及测试和日志记录。通过...

    自动添加调试头

    3. **Java支持**:在Java环境中,自动添加调试头可能涉及到插入`System.out.println`语句,或者使用更专业的日志框架如Log4j、SLF4J。此外,还可以配置IDE(如Eclipse、IntelliJ IDEA)的自动注释功能来实现这一点。...

    请假流程实例的全部代码

    例如,使用try-catch块捕获并记录错误,使用Log4j或SLF4J进行日志记录。 8. **测试**:为了确保代码质量,应该编写单元测试和集成测试。JUnit是Java中常用的单元测试框架,而Spring Boot Test库可以帮助进行集成...

    搜索链接Java网络爬虫(蜘蛛)源码.zip

    Java的Log4j或SLF4J库可以帮助记录爬虫运行过程中的事件和错误。 10. **代码结构和设计模式**: 使用模块化设计,如工厂模式创建HTTP客户端,单例模式管理数据库连接,观察者模式处理URL队列的变化,可以使代码更...

    企业QQ版 java 写的源代码

    Log4j、SLF4J和Spring Boot Actuator等工具可以帮助实现这一点。 10. **测试与持续集成**:为了确保软件质量,单元测试(JUnit)、集成测试(Selenium)和自动化构建工具(Maven或Gradle)是必备的。持续集成/持续...

Global site tag (gtag.js) - Google Analytics