天天看點

使用Springboot的時候Log4j與logback

因為從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>      

繼續閱讀