天天看点

使用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>      

继续阅读