【Slf4j】项目中使用 slf4j 的好处

文章目录

前言

  • 背景
    项目依赖了三方包,三方包有日志打印的代码。需要将三方包的日志打出来。
  • 问题
    是怎么做到项目的日志格式和依赖中的日志格式保持一致的?
  • 结论
    查阅资料后,发现是 slf4j 帮忙做了桥接。这里做下记录。

实验

@SpringBootTest(classes = App.class)
@RunWith(SpringRunner.class)
public class AppTest {
    
    

    /**
     * slf4j 的api获取logger, 默认的实现是 logback
     */
    Logger logger = LoggerFactory.getLogger(AppTest.class);

    @Resource
    private StarterService service;

    @Test
    public void testLog() {
    
    
        // 自己项目的日志
        logger.info("这是来自主项目的日志,使用slf4j的api进行日志打印");
        // 三方包的日志
        service.doSomething();
    }
}

在这里插入图片描述

原理

参考 slf4j 的官网,slf4j 在上例中起了两个作用
在这里插入图片描述

log4j-to-slf4j 提供了一组桥接器(bridge)实现,可以将Log4j 的日志事件转发到SLF4J,从而使得原本使用Log4j 的代码能够无缝地迁移到使用SLF4J。这个依赖是由 spring-boot-starrter-logging 传递依赖带进来的,所以主项目自动获得了该桥接器的能力。

在这里插入图片描述

在这里插入图片描述

后记

  • 项目尽量使用 slf4j 获取logger,让上层不依赖具体的日志实现,由使用方决定。特别适合 Spring Boot 的集成方式。当需要替换日志框架时不用改变应用层代码。
    /**
     * slf4j 的api获取logger, 默认的实现是 logback
     */
    Logger logger = LoggerFactory.getLogger(AppTest.class);

  • Spring Boot 自带的 slf4j 桥接api帮我们解决了依赖的日志打印问题,来自于 spring-boot-starter-logging

猜你喜欢

转载自blog.csdn.net/chenghan_yang/article/details/140909233