spring boot log4j2與三方依賴庫log4j沖突無法初始化問題解決方法


因為從Spring Boot 1.4開始,spring boot就不支持log4j了,必須是log4j2或者logback,具體兩者如何配置以及NDC的支持可以參考spring boot精華版

這里要講的是如果剛好用的spring boot是1.4+或者應用使用了log4j2,但是依賴的三方使用的是log4j,該如何處理?默認情況下,如果log4j和log4j2實現都存在,spring boot啟動時會提示無法初始化log4j,類似如下:

log4j:WARN No appenders could be found for logger (org.I0Itec.zkclient.ZkConnection). log4j:WARN Please initialize the log4j system properly.

然后日志一條都不打印。。。。
其中方法之一如果三方庫依賴的是SLF4J,就把log4j12的依賴排除掉,如下:
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.12</artifactId>
            <version>0.11.0.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

這樣使用log4j2的庫日志時可以正常打印了,三方庫依賴log4j的就會在運行期間仍然提示上述錯誤信息。

此時如果強行把三方庫依賴的log4j直接排除掉,在啟動時會提示“java.lang.NoClassDefFoundError: org/apache/log4j/Logger”,這絕對是不可以接受的。

如果三方庫沒有提供依賴log4j2的版本,可將依賴的 log4j 后,然后額外加上這個 log4j-1.2-api,如下:

        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.12</artifactId>
            <version>0.11.0.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
        </dependency>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM