log4j与sl4j mvn依赖性错误

时间:2017-05-08 17:19:37

标签: java maven apache-spark logging slf4j

我有一个mvn spark项目,其中包含以下依赖关系jar(仅显示相关的jar)。

    mvn dependency:tree |grep slf4j
[INFO] |  +- org.slf4j:slf4j-log4j12:jar:1.7.2:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.7.2:compile
[INFO] +- org.slf4j:jcl-over-slf4j:jar:1.7.2:runtime
[INFO] \- org.slf4j:jul-to-slf4j:jar:1.7.2:runtime

当我使用此代码运行此mvn项目时

SparkSession spark = SparkSession
                .builder()
                .appName("Test spark model file")
                .master("local")
                .getOrCreate();

我收到以下错误

Exception in thread "main" java.lang.StackOverflowError
    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
    at org.slf4j.impl.JDK14LoggerFactory.getLogger(JDK14LoggerFactory.java:59)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.slf4j.bridge.SLF4JBridgeHandler.getSLF4JLogger(SLF4JBridgeHandler.java:204)
    at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:289)
    at java.util.logging.Logger.log(Logger.java:738)
    at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:579)
    at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:651)
    at org.slf4j.bridge.SLF4JBridgeHandler.callLocationAwareLogger(SLF4JBridgeHandler.java:224)
    at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:299)
    at java.util.logging.Logger.log(Logger.java:738)
    at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:579)
    at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:651)...

我看到了Using log4j2 with slf4j 与我的错误相关,但似乎没有帮助

1 个答案:

答案 0 :(得分:1)

通过堆栈,您可以看到slf4j / jdk14logger桥的流通。

JDK14LoggerAdapter将slf4j logger桥接到jdk14logger,然后SLF4JBridgeHandler执行相反的操作。因此它会导致循环,然后导致stackoverflow错误。

您可以通过移除这两个罐中的一个来解决它。