log4j-slf4j2-impl未包含log4j-core?两款slf4j-impl依赖scope差异是否为设计意图
log4j-slf4j-impl与log4j-slf4j2-impl中log4j-core依赖scope差异说明
你观察到的依赖scope差异属实:
log4j-slf4j-impl对log4j-core的依赖scope为runtime,log4j-slf4j2-impl的对应依赖scope则为test,该变更来自关联LOG4J2-2975的指定commit。关于
log4j-slf4j2-impl未将log4j-core设为runtime依赖的设计意图:log4j-slf4j2-impl本质是SLF4J API到Log4j 2 API的桥接适配库,它仅负责完成日志API层面的请求转接,不需要直接依赖Log4j的核心实现逻辑。- 将
log4j-core的scope设为test,仅用于满足桥接库自身单元测试的日志输出需求,避免强制给引入该桥接库的项目自动添加不必要的runtime依赖——实际的日志核心实现(log4j-core或其他兼容Log4j 2 API的实现)需要由项目使用者根据自身需求主动引入,这是有意的设计决策。
对比
log4j-slf4j-impl的设计:它是直接将SLF4J日志请求绑定到Log4j核心实现的适配库,必须在runtime阶段依赖log4j-core才能完成日志功能的落地,因此其scope设为runtime是符合其定位的。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

