捋一下log4j、logback和slf4j的关系

项目中经常使用日志,但都是参照别人的配置复制粘贴,这次碰到这几个名词产生疑惑,遂写下这篇笔记进行总结。

结论

官方文档中的一段话明确描述了三者的关系。slf4j译为简单日志门面,是日志框架的抽象,笼统的讲就是slf4j是一系列的日志接口,而log4jlogback是众多日志框架中的两种。

The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks, such as java.util.logging, logback and log4j. SLF4J allows the end-user to plug in the desired logging framework at deployment time. Note that SLF4J-enabling your library/application implies the addition of only a single mandatory dependency, namely slf4j-api-1.7.21.jar.

实例验证

public class Program {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(Program.class);
        logger.info("hello world");
    }
}

image-20210607105129062

从运行结果可以看到,由于没有给出具体的logger实现,无法在控制台输出日志。也就是说我们在具体开发中,需要绑定一个日志框架,才能正常的使用slf4j

log4j和logback

log4j和logback是两个受欢迎的日志框架,这两个框架都是同一个作者,logback拥有更好的特性,是用来取代log4j的。下图是slf4j官网中的一张图。

click to enlarge

上图可以看到应用程序对日志框架的调用关系。应用程序调用slf4j api,而日志的输出最终是由底层的日志框架来实现的。这张图也体现了log4j和logback的不同。可以看到logback是直接实现了slf4j的接口,是不消耗内存和计算开销的。而log4j不是对slf4j的原生实现,所以slf4j api在调用log4j时需要一个适配层。

log4j和logback可以单独的使用,也可以绑定slf4j一起使用。

  • 单独使用:分别调用框架自己的方法来输出日志信息。
  • 绑定slf4j一起使用:调用slf4j的api来输入日志信息,具体使用与底层日志框架无关(需要底层框架的配置文件)

不推荐单独使用日志框架。假设项目中已经使用了log4j,而我们此时加载了一个类库,而这个类库依赖另一个日志框架。这个时候我们就需要维护两个日志框架,这是一个非常麻烦的事情。而使用了slf4j就不同了,由于应用调用的抽象层的api,与底层日志框架是无关的,因此可以任意更换日志框架。

slf4j绑定log4j或logback的用法比较常见,具体使用方法按照自己项目的需求进行配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值