mvn全新安装-成功构建。
java -jar-应用成功运行。
mvn spring-boot:run-引发错误:
同时检测到log4j-over-slf4j.jar和绑定的slf4j-log4j12.jar 类路径,抢占StackOverflowError。也可以看看 http://www.slf4j.org/codes.html#log4jDelegationLoop了解更多详情。
[INFO] Building Application 3.1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.1.1.RELEASE:run (default-cli) > test-compile @ service-app >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ service-app ---`enter code here`
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 5 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ service-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ service-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\name\workspace\project\service-app\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ service-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.1.1.RELEASE:run (default-cli) < test-compile @ service-app <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.1.RELEASE:run (default-cli) @ service-app ---
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/name/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/name/.m2/repository/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError.
SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.
[WARNING]
java.lang.reflect.InvocationTargetException
什么是mvn spring-boot:run做不同的事情?
[错误]无法在项目service-app上执行目标org.springframework.boot:spring-boot-maven-plugin:2.1.1.RELEASE:run(default-cli):运行时发生异常。 null:InvocationTargetException:ExceptionInInitializerError:在类路径上检测到log4j-over-slf4j.jar和绑定的slf4j-log4j12.jar,从而抢占了StackOverflowError。有关更多详细信息,另请参见http://www.slf4j.org/codes.html#log4jDelegationLoop。 -> [帮助1]
答案 0 :(得分:1)
同时检测到log4j-over-slf4j.jar和绑定的slf4j-log4j12.jar 类路径,抢占StackOverflowError。也可以看看 http://www.slf4j.org/codes.html#log4jDelegationLoop了解更多详情。
之所以会这样,是因为您的类路径中有SLF4J Logger
的多个实现。您将需要清理POM
文件,并仅保留一个实现。
您可以尝试排除冲突的依赖项,
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
答案 1 :(得分:0)
在您的应用程序中,您有两种记录器。
1 SLF4J(仅是一个抽象,不需要进行任何实际的日志记录,因此可以切换到不同的实现)
2 Log4j1(这是一个实现,实际的日志记录由此完成)
应用程序中发生的事情
slf4j-log4j12.jar
-此jar将把对slf4j记录器(org.slf4j.Logger
)的所有调用都路由到log4j1中。
log4j-over-slf4j.jar
-此jar将把对log4j记录器(org.apache.log4j.Logger
)的任何调用都路由到slf4j。(此jar通常在您的应用程序使用log4j记录器进行编码并且您想要重定向所有这些记录时使用调用SLF4J,因此您可以将日志记录框架更改为SLF4J,而无需进行任何代码更改。
当您在类路径中同时使用两个jar时,它将在slf4j-> log4j和log4j-> slf4j之间循环记录事件,这就是为什么发生堆栈溢出异常的原因。
根据您的要求,是否要使用slf4j,log4j,log4j-over-slf4j或slf4j和log4j,您需要选择类路径中可用的正确依赖项。
对于您的问题,您需要从类路径中排除slf4j-log4j12.jar
或log4j-over-slf4j.jar
。