SFL4J(一) - Java中那些剪不断理还乱的日志组件之SFL4J

x33g5p2x  于2021-12-28 转载在 其他  
字(1.3k)|赞(0)|评价(0)|浏览(358)

情景

在Java依赖中经常看到各种日志依赖,但搞不清他们之间的关系。

梳理

常见日志组件分类

  • API类:

  • Commons Logging

  • SLF4J

  • 实现类

  • JDK Logging

  • Logback

  • Log4J

  • Log4J2(其实这只是Log4J的2.x版本,但因为有比较大改动,所以网上有比较多人单独列出以区分Log4J 1.x版本)

ps: 入门教程可参考廖雪峰的网站

为什么这么多呢?

其实SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。

为什么有了Commons Logging和Log4j,又会蹦出来SLF4J和Logback?这是因为Java有着非常悠久的开源历史,不但OpenJDK本身是开源的,而且我们用到的第三方库,几乎全部都是开源的。开源生态丰富的一个特定就是,同一个功能,可以找到若干种互相竞争的开源库。

因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。

SFL4J

  • 全称Simple Logging Facade for Java (SLF4J),上面提到过,其实就是面向接口编程,屏蔽底层实现细节,它支持多种实现,参考下图:

每种不同实现的接入只需要引入对应的jar包即可,很方便。譬如最近在用的Log4J2, 引入下列依赖即可:

<dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j.version}</version>
        </dependency>
</dependencies>
  • 对于那些不是使用SLF4J API的项目,它也提供了一套桥接api(Bridging legacy APIs)用来辅助你做项目的迁移,只需要对症下药引入对应的slf4j-migrator即可。

注意:这个小字儿部分说了,并不是说所有的项目都需要引入那几个桥接的jar包,只有你真正用到了才需要引入。

相关文章