"此版本的SLF4J需要log4j版本1.2.12"警告与log4j 1.2.17

Kon*_*ner 2 java eclipse log4j slf4j maven

我有一个Java Maven项目,其依赖包括slf4j和它log4j adapter.我管理的版本log4j,slf4j-log4j12slf4j-api根据其最新版本http://mvnrepository.com,尤其是log4j的1.2.17版本已经超过1.2.12,但我仍然得到错误

SLF4J: This version of SLF4J requires log4j version 1.2.12 or later. 
    See also http://www.slf4j.org/codes.html#log4j_version 
Run Code Online (Sandbox Code Playgroud)

这对我来说完全不清楚.

我的Maven依赖管理如下所示:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.jena</groupId>
            <artifactId>apache-jena-libs</artifactId>
            <type>pom</type>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
    </dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

我该如何摆脱警告?

PS:我也得到了java.lang.NoSuchMethodError: org.apache.log4j.Logger.isTraceEnabled().

PPS:由于你的评论,我记得该程序有一个"lib"文件夹,它不是由Maven包含在类路径中,而是由Eclipse本身包含,所以冲突的依赖关系必须在那里.对不起,我完全忘记了我认为将Maven与lib文件夹混合是我的错.我想我必须尝试将尽可能多的库转换为maven依赖项.奇怪的是,即使我编辑"订单和导出"以将Maven依赖项置于顶部,问题仍然存在.

Cek*_*eki 6

StaticLoggerBinder在早期加载的slf4j-log4j12中的代码执行检查以确定该TRACE级别在log4j中是否可用.这是代码:

private StaticLoggerBinder() {
  loggerFactory = new Log4jLoggerFactory();
  try {
    Level level = Level.TRACE;
  } catch (NoSuchFieldError nsfe) {
    Util.report("This version of SLF4J requires log4j version 1.2.12 or later."+
                " See also http://www.slf4j.org/codes.html#log4j_version");
  }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很不透明.

可能是某些其他依赖性正在拉入或实际嵌入早期版本的log4j.已知一些*-standalone.jar文件可以做到这一点.

在部署时检查您的类路径.您是否在应用服务器中部署?是服务器类路径上的旧版本log4j吗?在java认可的路径?