commons-logging apache最初的日志门面,目的是在开发组件时不强依赖日志实现,给调用者以选择。
jcl-over-slf4j slf4j开发的为了兼容前者的适配,里面的内容和前者基本一致,引用时和前者互斥。
slf4j-api slf4j的主api,作为独立的日志门面。
slf4j-log4j slf4j对log4j的适配,要和log4j包一起引用
log4j log4j实现
logback-classic logback实现。
引用关系:
目前项目中的log4j引用比较混乱。可用的依赖和使用方式由如下那么几种:
1. log4j-1.2.16.jar
不使用框架,仅使用实现。项目中不常使用
使用Logger.getLogger()
2.commons-logging + log4j
简单门面+实现
使用
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
private static final Log logger = LogFactory.getLog(CourseCenterUnitTestBase.class);
3. jcl-over-slf4j + slf4j-api + slf4j-log4j + log4j
slf4j门面+log4j实现。
官方解释是这个组合,解释为jcl-over-slf4j的作用是把apache的门面嫁接到slf4j的门面。我测试了一下,实际上commons-logging + slf4j-api + slf4j-log4j + log4j 貌似也行得通。
使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(CourseCenterUnitTestBase.class);
4.jcl-over-slf4j + slf4j-api + logback-classic
slf4j门面+logback实现。没使用过,相信网上一大堆。
--------------
#2各种jar包总结
-
log4j1:
- log4j:log4j1的全部内容
-
log4j2:
- log4j-api:log4j2定义的API
- log4j-core:log4j2上述API的实现
-
logback:
- logback-core:logback的核心包
- logback-classic:logback实现了slf4j的API
-
commons-logging:
- commons-logging:commons-logging的原生全部内容
- log4j-jcl:commons-logging到log4j2的桥梁
- jcl-over-slf4j:commons-logging到slf4j的桥梁
-
slf4j转向某个实际的日志框架:
场景介绍:如 使用slf4j的API进行编程,底层想使用log4j1来进行实际的日志输出,这就是slf4j-log4j12干的事。
- slf4j-jdk14:slf4j到jdk-logging的桥梁
- slf4j-log4j12:slf4j到log4j1的桥梁
- log4j-slf4j-impl:slf4j到log4j2的桥梁
- logback-classic:slf4j到logback的桥梁
- slf4j-jcl:slf4j到commons-logging的桥梁
-
某个实际的日志框架转向slf4j:
场景介绍:如 使用log4j1的API进行编程,但是想最终通过logback来进行输出,所以就需要先将log4j1的日志输出转交给slf4j来输出,slf4j再交给logback来输出。将log4j1的输出转给slf4j,这就是log4j-over-slf4j做的事
这一部分主要用来进行实际的日志框架之间的切换(下文会详细讲解)
- jul-to-slf4j:jdk-logging到slf4j的桥梁
- log4j-over-slf4j:log4j1到slf4j的桥梁
- jcl-over-slf4j:commons-logging到slf4j的桥梁
#3集成总结
##3.1 commons-logging与其他日志框架集成
-
1 commons-logging与jdk-logging集成:
需要的jar包:
- commons-logging
-
2 commons-logging与log4j1集成:
需要的jar包:
- commons-logging
- log4j
-
3 commons-logging与log4j2集成:
需要的jar包:
- commons-logging
- log4j-api
- log4j-core
- log4j-jcl(集成包)
-
4 commons-logging与logback集成:
需要的jar包:
- logback-core
- logback-classic
- slf4j-api、jcl-over-slf4j(2个集成包,可以不再需要commons-logging)
-
5 commons-logging与slf4j集成:
需要的jar包:
- jcl-over-slf4j(集成包,不再需要commons-logging)
- slf4j-api
##3.2 slf4j与其他日志框架集成
-
slf4j与jdk-logging集成:
需要的jar包:
- slf4j-api
- slf4j-jdk14(集成包)
-
slf4j与log4j1集成:
需要的jar包:
- slf4j-api
- log4j
- slf4j-log4j12(集成包)
-
slf4j与log4j2集成:
需要的jar包:
- slf4j-api
- log4j-api
- log4j-core
- log4j-slf4j-impl(集成包)
-
slf4j与logback集成:
需要的jar包:
- slf4j-api
- logback-core
- logback-classic(集成包)
-
slf4j与commons-logging集成:
需要的jar包:
- slf4j-api
- commons-logging
- slf4j-jcl(集成包)
#4 日志系统之间的切换