日志库的历史和体系

整个 Java 日志库领域绕不开的人物是 Ceki Gülcü,大半个日志库领域都与他有关。

日志库及其发展历史

  • Java 1.4 之前 JDK 中并没有日志相关功能。Apache 基金会的 Log4j 是整个 Java 世界的唯一选择。Ceki Gülcü 是其作者。

  • 2002 发布的 Java 1.4 自带了自己的日志库:jdk-logging,也称为 J.U.L

  • Log4j 和 jdk-logging 两种日志库选择,导致了日志使用的混乱。所以 Apache 推出了commons-logging 。它只是定义了一套日志接口(也是第一个日志接口),支持运行时动态加载日志组件。它的出现解决了多种日志框架共存的尴尬,也是面向接口编程思想的一种具体体现。

  • 2006 年,Ceki Gülcü(Log4j 的作者)觉得 commons-logging 这套接口设计的不好,容易让开发者写出有性能问题的代码。他离开 Apache 后,又搞出来一套类似 commons-logging 的接口类的日志库:Slf4j 。

  • 在搞出来 Slf4j 之后,Ceki Gülcü 又顺带开发了 Logback,做为 Slf4j 的默认实现。在功能完整度和性能上,Logback 超越了当时所有已有的日志实现框架。

  • 鉴于 logback 的更优秀的设计思路,Apache 基金会重写了 Log4j 库,推出其 2.0 版本。习惯性称为 Log4j2 。

日志库分类

从日志库的发展历史来看,众多的日志相关 Jar 包进行分类,主要分为三类:

接口类

只提供 API 定义,没有提供具体实现。目的是为应用层提供标准化的使用方式。既所谓的面向接口编程。

  • commons-logging(也称 J.C.L,java-commons-logging)

  • SLF4J

实现类

具体的日志实现类,提供对日志的收集/管理功能。受不同的需求、不同的历史环境影响,各框架功能上有许多不同。但遵循进化论规律。

  • Log4j
  • jdk-logging(也称,J.U.L,java-util-logging)
  • Logback
  • Log4j2

桥接类

多种日志实现框架混用情况下,需要借助桥接类进行日志的转换,最后统一成一种进行输出。

  • slf4j-jdk14
  • slf4j-log4j12
  • log4j-slf4j-impl
  • logback-classic
  • slf4j-jcl
  • jul-to-slf4j
  • log4j-over-slf4j
  • icl-over-slf4j
  • log4j-to-slf4j

日志库关系图

20220627135126.png

你可能感兴趣的:(日志库的历史和体系)