vlambda博客
学习文章列表

log4j2 or slf4j ? java日志框架,今天得说清楚!

日志记录处理,是每个系统都必备的基础功能。记录日志是为了跟踪系统运行状态,可以实时了解系统各功能运行情况,特别是系统出现异常时,便于快速定位错误和分析处理。


幸运的是java程序员不必自己开发日志记录模块。java具有丰富的生态,有多个日志框架供开发者选择,如:Log4j、log4j2、slf4j、logback、jui、commons loggin等。如何快速的认知和了解这些日志框架,并选择一个实用、主流的框架来学习或者应用到项目中去,对于java初学者而言,至关重要。本文将一次性说清楚。


一、java日志框架发展历程


01:1996年早期,欧洲安全电子市场项目组编写了日志框架Log4j,后来Log4j成为Apache基金会项目中的一员。


02:2002年Java1.4发布,Sun推出了自己的日志库JUL(Java Util Logging),其实现基本模仿了Log4j的实现。但log4j此时已经非常流行和普及。


03:接着,Apache推出了Jakarta Commons Logging,JCL只是定义了一套日志接口,支持运行时动态加载日志组件的实现。也就是说 JCL可以支持log4j和JU


04:2006年,Ceki Gülcü不适应Apache的工作方式,离开了Apache。然后先后创建了Slf4j(Simple Logging Facade for Java)日志门面接口,和日志实现Logback两个项目。Slf4j运行效率较高,后来应用发展迅猛。


05:Apache眼看有被Logback反超的势头,于2012-07重写了Log4j 1.x,成立了新的项目Log4j 2, Log4j 2具有Logback的所有特性。


至此,日志框架主要有两大流派:Commons Logging和Slf4j



二、java日志框架关系图


 从前面java框架日志发展的历程,我们可以看出,为了实现兼容性和拓展性。日志框架提炼出了日志门面接口,而后端实现由独立项目实现,为了实现彼此兼容适配,还出现了一些桥接项目。以下是日志框架关系图。


对于客户端(开发者)来讲,只需要调用日志接口开发就可以了,然后发布时可以选择相应的日志实现。



三、如何选择?笔者的建议


对于开发者而言,选择主流框架即可,笔者建议选用Slf4j接口,以及对应的实现LogBack。Spring Boot 默认的日志框架也是LogBack,而这也说明了LogBack是非常主流和优秀的。