log4j2、logback、slf4j傻傻分不清楚

一、写在前面

log4j2、logback、slf4j都是和日志相关的。在我们实际的工作中,毋庸置疑的是我们都会涉及到。但是大家有没有想过它们之间的关系呢?不怕大家笑话,大狮兄工作近7年,也是在去年的时候才搞清楚它们之前的关系。在我以前的认知里,log4j2和logback是同等级的,可以理解为兄弟的关系,但是对于slf4j我只知道它是和日志相关的,但具体到它和log4j2、logback的关系…

(表情:支支吾吾)

二、SLF4J是什么?
The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.

官网的大概意思是:SLF4J是一个可以充当不同日志框架门面的角色,它允许用户在部署的时候可以自由切换底层的日志框架实现。

那么日志框架门面是什么意思呢,门面字面意思就是外表、外观。日志框架门面简单理解就是它仅仅给所有日志框架提供统一的外观(也就是配置),不提供具体的日志服务。具体的日志服务由内部通过使用不同的实现(也就是jar包)来提供。

举个例子:我们都知道菜鸟裹裹快递柜,它不提供快递寄件服务,只是负责管理各个快递公司的快递。具体的寄件服务由中通、申通等快递公司提供,而具体选择哪个快递公司寄件是由用户决定的。所以菜鸟裹裹我们就可以理解为日志门面,而各个快递公司就是各个日志框架实现。

三、LOGBACK与LOG4J2的关系

先来看三张图:
SLF4J接口
LOGBACK接口实现
LOG4J2接口实现
从上面几张图我们可以看到,logback和log4j2都是slf4j日志门面实现的其中之一,它们之间有着怎样的联系呢?谈论logback和log4j2,就不得不提log4j。

log4j是一个程序员大神开发出来的基于Java的日志服务,后来捐献给了Apache基金会,成为了Apache日志服务的一个子项目,大神也参与了其中的开发支持。后来大神和Apache产生了一些矛盾,大神出走,另起炉灶,开发出了和log4j使用几无差别的logback框架,并在框架中修复了很多log4j的bug,同时性能也有了很大的提升。因为和log4j的使用基本上没有什么差别,logback渐渐的被开发者接受。

Apache的log4j由于logback的竞争,日渐式微,终于在2015年,Apache宣布log4j不再维护,建议用户的项目全部迁移到log4j2。Apache log4j2也就是Apache log4j的继任者,它不仅修复了log4j的bug,同样借鉴了logback的优点,在多线程方面也凸显了自己的优势,相关的多线程性能检测可以自行百度。

四、LOGBACK与LOG4J2的使用

日志服务的使用一定是门面+框架实现,所以不管使用哪种日志框架,都需要引入门面,也就是slf4j。

<!-- slf4j核心依赖 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.32</version>
</dependency>
1. logback使用
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
</dependency>
    
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.11</version>
</dependency>
2. log4j2使用
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.19.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.19.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.19.0</version>
</dependency>

这里需要友善提醒一下,log4j2引入的时候需要额外添加一个log4j-slf4j-impl的依赖,也称桥接包,是和日志门面连通用的。log4j的使用也会有,而logback则没有。

五、总结

Log4J2 、LogBack都是具体的日志框架实现。使用时要和门面日志(SLF4J)搭配使用。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值