整个 Java 日志库领域绕不开的人物是 Ceki Gülcü,大半个日志库领域都与他有关。
日志库及其发展历史
-
Java 1.4 之前 JDK 中并没有日志相关功能。Apache 基金会的 Log4j 是整个 Java 世界的唯一选择。<small>Ceki Gülcü 是其作者。</small>
-
2002 发布的 Java 1.4 自带了自己的日志库:jdk-logging,也称为
J.U.L
-
Log4j 和 jdk-logging 两种日志库选择,导致了日志使用的混乱。所以 Apache 推出了commons-logging 。它只是定义了一套日志接口<small>(也是第一个日志接口)</small>,支持运行时动态加载日志组件。它的出现解决了多种日志框架共存的尴尬,也是面向接口编程思想的一种具体体现。
-
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<small>(也称
J.C.L
,java-commons-logging)</small> -
SLF4J
实现类
具体的日志实现类,提供对日志的收集/管理功能。受不同的需求、不同的历史环境影响,各框架功能上有许多不同。但遵循进化论规律。
- Log4j
- jdk-logging<small>(也称,
J.U.L
,java-util-logging)</small> - 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
网友评论