所以我试着按照这个(非maven实现)和要求在他们的网站上添加slf4j到log4j。并尝试使用此代码
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Main.class);
logger.info("test");
}
并将以下内容添加到我的库
- log4j-api-2.3.jar
- log4j-core-2.3.jar
- log4j-sl4j-impl-2.3.jar
- log4j-to-sl4j-2.3.jar
- slf4j-api-1.7.12.jar
当我尝试运行它时,我得到以下错误
Exception in thread "main" java.lang.StackOverflowError
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:964)
at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:40)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:284)
at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:284)...
你知道我哪里错了吗?
您正在创建log4j-slf4j-impl-2.3.jar
和log4j-to-slf4j-2.3.jar
的调用循环。
log4j-slf4j-impl-2.3.jar
是向log4j发送slf4j调用的适配器的实现。
log4j-to-slf4j-2.3.jar
正在向slf4j发送log4j调用。删除这个
以防万一,如果您的类路径中有logback,也必须将其删除!
想法一:
以上答案有效。我的项目是一个多模块项目,log4j-to-slf4j-2.3.jar
依赖是由一个不同的项目拉出来的。我必须扫描每个项目,找出是哪个项目在拉动这个。我在项目级别使用了以下命令。
gradlew common:dependencies --configuration runtime
common
为项目名称configuration runtime
-你可以根据需要修改
想法二:
如果你正在使用spring,它有多模块项目。然后,您可以简单地在每个子项目的build.gradle
或dependency.gradle
configurations {
all*.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}