日志组件三:日志接口与日志实现框架
2017-05-27 09:15
405 查看
前面介绍了log4j和log4j2这两种日志的实现,但是在具体使用中,它们一般不会单独出现,而是与日志门面结合使用;但是在我们众多的业务系统中,由于开发者或者团队不同,日志实现与日志接口的选型也是五花八门,这篇文章就是来整理下日志实现与日志框架之间的组合。主要参考:https://my.oschina.net/pingpangkuangmo/blog/406618
四种日志实现:logging,log4j1、log4j2、logback
对于开发者而言,每种日志都有不同的写法。如果我们以实际的日志框架来进行编写,代码就限制死了,之后就很难再更换日志系统,很难做到无缝切换。
log4j1:log4j
log4j2:log4j-api(定义的api)、log4j-core(api的实现)
logback:logback-core(logback的核心包)、logback-classic(logback实现了slf4j的API)
commons-logging:简称jcl
commons-logging(commons-logging的原生全部内容)
log4j-jcl(commons-logging到log4j2的桥梁)
jcl-over-slf4j(commons-logging到slf4j桥梁)
slf4j:这个框架比较复杂,在整个日志组件中起到了一个中转站的作用
a、使用slf4j的api编程,底层用其他具体的实现:
slf4j-jdk14:slf4j到jdk-logging的桥梁
slf4j-log4j12:slf4j到log4j1的桥梁
log4j-slf4j-impl:slf4j到log4j2的桥梁
logback-classic:slf4j到logback的桥梁
slf4j-jcl:slf4j到commons-logging的桥梁
b、如使用log4j的api编程,但最终输出通过logback来实现,这样的话就必须先将log4j转交给slf4j,再通过slf4j转交给logback
jul-to-slf4j:jdk-logging到slf4j的桥梁
log4j-over-slf4j:log4j1到slf4j的桥梁
jcl-over-slf4j:commons-logging到slf4j的桥梁
1、log4j
2、log4j2
3、logback
这里出现了slf4j相关的jar包,其实logback官网的使用方式,就是和slf4j集成起来的,Logger、LoggerFactory都是slf4j的接口和类
4、commons-logging与jul集成
5、commons-logging与log4j1集成
6、commons-logging与log4j2集成
7、commons-logging与logback集成
8、slf4j与jdk-logging集成
9、slf4j与log4j1集成
10、slf4j与log4j2集成
11、slf4j与logback集成
slf4j-jdk14:slf4j切换到jdk-logging
slf4j-log4j12:slf4j切换到log4j1
slf4j-jcl:slf4j切换到commons-logging
一、日志组件概念
两种日志接口:commons-logging、slf4j四种日志实现:logging,log4j1、log4j2、logback
1、日志接口的作用
目前一统江湖的就是apache的commons-logging和slf4j,他两的作用就是提供统一的接口,而具体的日志实现交给底层绑定的具体的日志实现框架。这样一来,我们的业务系统中可以灵活的更换不同的日志实现,并且可以不需要去改动代码。对于开发者而言,每种日志都有不同的写法。如果我们以实际的日志框架来进行编写,代码就限制死了,之后就很难再更换日志系统,很难做到无缝切换。
2、jar包的对应:
logging:jdk自带的日志实现,简称jul(java-util-logging)log4j1:log4j
log4j2:log4j-api(定义的api)、log4j-core(api的实现)
logback:logback-core(logback的核心包)、logback-classic(logback实现了slf4j的API)
commons-logging:简称jcl
commons-logging(commons-logging的原生全部内容)
log4j-jcl(commons-logging到log4j2的桥梁)
jcl-over-slf4j(commons-logging到slf4j桥梁)
slf4j:这个框架比较复杂,在整个日志组件中起到了一个中转站的作用
a、使用slf4j的api编程,底层用其他具体的实现:
slf4j-jdk14:slf4j到jdk-logging的桥梁
slf4j-log4j12:slf4j到log4j1的桥梁
log4j-slf4j-impl:slf4j到log4j2的桥梁
logback-classic:slf4j到logback的桥梁
slf4j-jcl:slf4j到commons-logging的桥梁
b、如使用log4j的api编程,但最终输出通过logback来实现,这样的话就必须先将log4j转交给slf4j,再通过slf4j转交给logback
jul-to-slf4j:jdk-logging到slf4j的桥梁
log4j-over-slf4j:log4j1到slf4j的桥梁
jcl-over-slf4j:commons-logging到slf4j的桥梁
二、组件集成
集成这块的业务代码中打印日志都是统一的格式,这也是日志接口为我们带来的便利,所以打印日志不进行介绍,主要是不同组合之间的jar包依赖,我们重点观察pom文件的配置1、log4j
2、log4j2
3、logback
这里出现了slf4j相关的jar包,其实logback官网的使用方式,就是和slf4j集成起来的,Logger、LoggerFactory都是slf4j的接口和类
4、commons-logging与jul集成
5、commons-logging与log4j1集成
6、commons-logging与log4j2集成
7、commons-logging与logback集成
8、slf4j与jdk-logging集成
9、slf4j与log4j1集成
10、slf4j与log4j2集成
11、slf4j与logback集成
三、jar包冲突说明
1、jul-to-slf4j与slf4j-jdk14冲突
jul-to-slf4j: jdk-logging切换到slf4jslf4j-jdk14:slf4j切换到jdk-logging
2、log4j-over-slf4j与slf4j-log4j12冲突
log4j-over-slf4j:log4j1切换到slf4jslf4j-log4j12:slf4j切换到log4j1
3、jcl-over-slf4j与slf4j-jcl冲突
jcl-over-slf4j:commons-logging切换到slf4jslf4j-jcl:slf4j切换到commons-logging
相关文章推荐
- MVC框架实现4---Smart框架Action组件接口设计
- Java日志框架slf4j API介绍及异常接口实现分析
- IExtenderProvider 接口的应用.实现自定义组件LilyValidateProvider
- 记录程序日志(日志实现和统一接口)
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层(转)
- Adhesive框架系列文章--分布式组件客户端模块实现
- 设计并实现日志和异常框架
- Flex组件实现接口
- 一种Java日志系统框架的设计与实现
- 使用AOP实现日志和权限认证组件
- MVC框架实现5---Smart框架Forwarder组件接口设计和实现
- ATL组件模拟之多接口实现和内部类实现多接口
- 组件图 为组件配的接口 及实现方法
- VB6.0接口,转转转 (用VB6.0接口实现INI文件的读取组件)
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层
- COM 组件设计与应用(八)——实现多接口
- 实现IHttpModule接口获取Session来实现页面访问日志功能。
- commons.logging1.1.1源代码研究(3)-- 日志器Log接口,SimpleLog实现
- 如何实现IEnumerable<T>和IEnumerator接口,一个ASP.NET MVC日志模型的实现
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层(转)