我有一个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 与我的错误相关,但似乎没有帮助
答案 0 :(得分:1)
通过堆栈,您可以看到slf4j / jdk14logger桥的流通。
JDK14LoggerAdapter将slf4j logger桥接到jdk14logger,然后SLF4JBridgeHandler执行相反的操作。因此它会导致循环,然后导致stackoverflow错误。
您可以通过移除这两个罐中的一个来解决它。