场景
依赖
 <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
。。。代码
public class ApiTest {
    private final Logger logger = LoggerFactory.getLogger(ApiTest.class);
    @Test
    public void test(){
        logger.info("Lasse到此一游");
    }
}不尽人意的结果:没有任何输出
 
   网上找了一堆文章都无法解决,最后只能自己手撕源码了。
问题点
方法:org.slf4j.LoggerFactory.getILoggerFactory();
 
   找错思路
可以看到我明明导入了logback-classic依赖,它却使用了slf4j-log4j12
又在网上搜索了找了一下有没有指定使用特定依赖包下的StaticLoggerBinder,结果无。
又想到是否根据依赖导入的顺序,当机立断去看哪个依赖导入了slf4j-log4j12
 
   最后找到了是org.apache.zookeeper引用了slf4j-log4j12
解决方法
LoggerFactory是根据加载顺序指定使用哪个依赖下的StaticLoggerBinder的。
所以调整依赖的顺序。
将logback-classic顺序放到依赖的最上方
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
        </dependency>结果查看
使用理想中的依赖
方法:org.slf4j.LoggerFactory.getILoggerFactory();
 
   可以看到它用到了logback-classic下的StaticLoggerBinder类
控制台输出
 
   总结
今后除了关注依赖冲突,版本冲突还有多加一项依赖的加载顺序。



















