SLF4J warning或error信息含义以及解决方法

介绍

结合译文https://www.slf4j.org/codes.html和目前使用slf4j遇到的问题整理成文。

译文来源

译文来源 https://www.slf4j.org/codes.html

Failed to load class org.slf4j.impl.StaticLoggerBinder

  • 原因和含义

    org.slf4j.impl.StaticLoggerBinder 类没能被加载到内存中会给出warning信息,原因是在class path下没有找到合适的SLF4J绑定。

  • 解决方法

    在class path放置如下Jar包中的一个且只有一个:

    slf4j-nop.jar*

    slf4j-simple.jar,

    slf4j-log4j12.jar,

    slf4j-jdk14.jar

    logback-classic.jar

    以gradle加载为例,添加依赖

dependencies {
    ...

    // slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar, logback-classic.jar
    compile("ch.qos.logback:orlogback-classic:1.1.11")
}

Multiple bindings were found on the class path

  • 原因和含义

    SLF4J API 被设计为绑定一个且只有一个底层日志框架,当发现多个时会产生warning信息。常见的情况是加载的三方包之间产生冲突。

  • 解决方法

    选择一个绑定,移除其他绑定。

    以gradle加载为例,利用exclude移除三方包中的依赖

dependencies {
    ...

    //如三方包之间冲突,移除三方包hadoop-common中的依赖
    compile("org.apache.hadoop:hadoop-common:2.7.4") {
        exclude module : 'slf4j-log4j12'
    }
}

Logging factory implementation cannot be null

  • 原因和含义

    LoggerFactory 在class path下没有找到合适的SLF4J绑定,给出error信息

  • 解决方法

    在class path放置如下Jar包中的一个且只有一个:

    slf4j-nop.jar*

    slf4j-simple.jar,

    slf4j-log4j12.jar,

    slf4j-jdk14.jar

    logback-classic.jar

    以gradle加载为例,添加依赖

dependencies {
    ...

    // slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar, logback-classic.jar
    compile("ch.qos.logback:orlogback-classic:1.1.11")
}

Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError.

  • 原因和含义

    当SLF4J 绑定了lf4j-log4j12.jarlog4j-over-slf4j.jar会出现StackOverflowError(栈溢出)的错误。

Exception in thread "main" java.lang.StackOverflowError
    at java.util.Hashtable.containsKey(Hashtable.java:306)
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:36)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:39)

  • 解决方法

    我当时遇到这种问题,解决方法是去掉lf4j-log4j12.jarlog4j-over-slf4j.jar其中的一个依赖,仅保留一个。

dependencies {
    ...

    //删除其中一个依赖
    compile('org.slf4j:slf4j-log4j12:1.7.25')
    //compile('org.slf4j:log4j-over-slf4j:1.7.25')

}

java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent

  • 原因和含义

    slf4j-api 版本较低导致。Logback-classic 1.1.4版本或更新的版本,需要slf4j-api 1.7.15版本及以上

    Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent
          at java.lang.Class.getDeclaredMethods0(Native Method)
          at java.lang.Class.privateGetDeclaredMethods(Class.java:2451)
          at java.lang.Class.privateGetPublicMethods(Class.java:2571)
          at java.lang.Class.getMethods(Class.java:1429)

  • 解决方法

    更新slf4j-api.jar 版本到1.7.15或更新的版本

dependencies {
    ...

    //更新版本
    compile('org.slf4j:slf4j-api:1.7.25)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值