说到日志,不得不提一下Ceki Gülcü,这个牛逼到爆的程序员十分的犀利,因为 log4j、logback,log4j2,slf4j 都是他写的,log4j在前些年有多牛逼,这个就不用我说了(log4j之前差点成为SUN公司JDK中的一部分),现在logback是spring boot默认的日志框架,log4j2是目前性能最好的日志框架。Ceki 这个牛逼的程序员,真是我崇拜的大神。
slf4j又是什么呢?其实是当时日志的框架有很多,不仅有log4j还有jdk-logging等其他日志框架,Ceki 觉得我怎么不再写个抽象层,把这些日志实现都屏蔽?然后这个大佬,就写了一层日志的抽象层框架,就是slf4j的起源。
各种日志包介绍
1、log4j
- log4j:log4j1的全部内容,2012年5月更新的1.2.17为最新版,相当多的旧系统现在依然使用。
2、logback
- logback-core:是基础模块,为日志的基础。
- logback- classic:是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
- logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能。
3、log4j2
官网:https://logging.apache.org/log4j/2.x
异步记录器的吞吐量比Log4j 1.x和Logback高18倍(官方数据),延迟低。
- log4j-core: 核心实现包,日志的基础
- log4j-api:是log4j的API接口,可以与log4j-core一起使用,也可以使用其他的日志实现,例如logback实现,相比slf4j还有其他优点,例如:支持记录方式不止是字符串,有更多的记录方式等等。
- log4j-web:Web项目使用
- log4j-jcl:log4j到commons-logging的桥梁
4、JUL(java.util.logging)
Java提供了自己的日志框架,类似于Log4J,但是API并不完善,对开发者不是很友好,而且对于日志的级别分类也不是很清晰。
- jul-to-slf4j:jdk-logging到slf4j的桥梁
5、JCL(Jakarta Commons-Logging)
Jakarta Commons Logging和SLF4J非常类似,也是提供的一套API来掩盖了真正的Logger实现。便于不同的Logger的实现的替换,而不需要重新编译代码。缺点在于它的查找Logger的实现者的算法比较复杂,而且当出现了一些class loader之类的异常时,无法去修复它。
- commons-logging:commons-logging所有内容
- commons-logging-api:commons-loggingAPI接口
- jcl-over-slf4j
6、slf4j
如果你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,因为不可能影响最终用户选择哪种日志系统。在另一方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要。
- slf4j-jdk14:slf4j到jdk-logging的桥梁
- slf4j-log4j12:slf4j到log4j1的桥梁
- log4j-slf4j-impl:slf4j到log4j2的桥梁
- logback-classic:slf4j到logback的桥梁
- slf4j-jcl:slf4j到commons-logging的桥梁
日志集成配置
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
2、slf4j与其他日志框架集成
1)slf4j与jdk-logging集成:
需要的jar包:
slf4j-api
slf4j-jdk14(集成包)
2)slf4j与log4j1集成:
需要的jar包:
slf4j-api
log4j
slf4j-log4j12(集成包)
3)slf4j与log4j2集成:
需要的jar包:
slf4j-api
log4j-api
log4j-core
log4j-slf4j-impl(集成包)
log4j-slf4j18-impl(集成包)
这个地方有个坑,由于SLF4J绑定的兼容性中断,从版本2.11.1开始,提供了两个SLF4J到Log4j适配器。
- log4j-slf4j-impl应与SLF4J 1.7.x或更早版本一起使用。
- log4j-slf4j18-impl应与SLF4J 1.8.x版本或更新版本一起使用。
如果需要了解详情,请移步https://www.docs4dev.com/docs/zh/log4j2/2.x/all/log4j-slf4j-impl-index.html
4)slf4j与logback集成:
需要的jar包:
slf4j-api
logback-core
logback-classic(集成包)
5)slf4j与commons-logging集成:
需要的jar包:
slf4j-api
commons-logging
slf4j-jcl(集成包)
网友评论