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

时间:2013-04-12 11:04:41

标签: java eclipse maven log4j slf4j

我有一个Java Maven项目,其依赖项包括slf4j及其log4j adapter。 我根据http://mvnrepository.com管理log4jslf4j-log4j12slf4j-api的最新版本,特别是1.2.17的log4j版本远远超过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 

这对我来说完全不清楚。

My 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>

如何摆脱警告?

P.S。:我也得到java.lang.NoSuchMethodError: org.apache.log4j.Logger.isTraceEnabled()

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

3 个答案:

答案 0 :(得分:6)

slf4j-log4j12中的

StaticLoggerBinder代码很早就加载,执行检查以确定log4j中TRACE级别是否可用。这是代码:

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");
  }
}

对我来说似乎很不透明。

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

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

答案 1 :(得分:0)

您应该在<dependency>之外定义<dependencyManagement>,如下所示: -

<dependencyManagement>
    <dependencies>
    ...
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.apache.jena</groupId>
        <artifactId>apache-jena-libs</artifactId>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
</dependencies>

有关详细信息,请参阅Introduction to the Dependency Mechanism: Dependency Management

我希望这可能有所帮助。

答案 2 :(得分:0)

更改评论以回答,因为它似乎解决了这个问题。

  

这是一个类加载器问题,maven正确构建但缺少   依赖。你能尝试提供缺少的依赖项吗?   行家?否则我建议你看一下Eclipse特有的   的依赖关系。