现今Java日志领域被划分为两大阵营:
Commons Logging阵营和Slf4j阵营。
Commons Logging在Apache大树的笼罩下,有很大的用户基数。但有证据表明,形式正在发生变化。2013年底有人分析了GitHub上30000个项目,统计出了最流行的100个Libraries,可以看出Slf4j的发展趋势更好:
java常用日志框架关系
Log4j 2与Log4j 1发生了很大的变化,Log4j 2不兼容Log4j 1。
Commons Logging和Slf4j是日志门面(门面模式是软件工程中常用的一种软件设计模式,也被称为正面模式、外观模式。它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用)。Log4j和Logback则是具体的日志实现方案。可以简单的理解为接口与接口的实现,调用者只需要关注接口而无需关注具体的实现,做到解耦。
比较常用的组合使用方式是Slf4j与Logback组合使用,Commons Logging与Log4j组合使用。
Logback必须配合Slf4j使用。由于Logback和Slf4j是同一个作者,其兼容性不言而喻。
Slf4j与其它日志组件的关系说明
Slf4j实现机制决定Slf4j限制较少,使用范围更广。由于Slf4j在编译期间,静态绑定本地的LOG库使得通用性要比Commons Logging要好。
Slf4j的设计思想比较简洁,使用了Facade(美[fə’sɑd]英[fə’sɑːd]n.外表;(建筑物的)正面;网络外观;外观模式;)门面模式设计模式,Slf4j本身只提供了一个slf4j-api-version.jar(例:slf4j-api-1.5.8.jar)包,这个jar中主要是日志的抽象接口,jar中本身并没有对抽象出来的接口做实现。
常见组合: