前言
- 背景
项目依赖了三方包,三方包有日志打印的代码。需要将三方包的日志打出来。 - 问题
是怎么做到项目的日志格式和依赖中的日志格式保持一致的? - 结论
查阅资料后,发现是slf4j帮忙做了桥接。这里做下记录。
实验
- starter 依赖 log4j
- 主项目使用 logback (slf4j 的api)
@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。这个依赖是被

log4j-to-slf4j 是由 spring-boot-starrter 传递依赖带进来的。

后记
- 项目尽量使用 slf4j 获取logger,让上层不依赖具体的日志实现,由使用方决定。特别适合 Spring Boot 的集成方式。
/**
* slf4j 的api获取logger, 默认的实现是 logback
*/
Logger logger = LoggerFactory.getLogger(AppTest.class);
- Spring Boot 自带的 slf4j 桥接api帮我们解决了依赖的日志打印问题,来自于
spring-boot-starter-logging






![[数据集][目标检测]生产线上金属罐易拉罐正反面检测数据集VOC+YOLO格式2715张2类别](https://i-blog.csdnimg.cn/direct/afe05e380f174efa885aa38c732498f3.png)












