SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”。错误

Posted

技术标签:

【中文标题】SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”。错误【英文标题】:SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". error 【发布时间】:2012-08-08 15:26:48 【问题描述】: 关于 Eclipse IDEIndigoJunoKepler(32 位和 64 位版本))李> 平台WindowsUbuntuMac m2e 版本1.1.0.20120530-00091.2.0.20120903-10501.3.0.20130129-09261.4.0.20130601-0317

一般信息

将m2e更新到1.1版后出现上述错误。 通过删除 m2e 1.1 并回滚到 m2e 1.0,一切正常。我尝试在 Windows 和 Ubuntu 中重复该问题,它给了我完全相同的错误。对 slf4j-api 和 logback 的许多配置进行了测试,但似乎没有一个有效。

该错误出现在任何 maven 项目中即使没有声明 slf4j 依赖项

新建 Maven 项目--> maven-archetype-quickstart

新建 Maven 项目--> 没有原型选择的简单项目

结果

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

测试环境和配置

在 Mac 上使用 Eclipse Indigo 和 Eclipse Juno(32 位和 64 位)进行测试,在 Ubuntu 上使用 32 位,在 Windows 上使用 64 和 32 位。测试了 Juno ClassicJuno Modeling toolsKepler StandardKepler Modeling Tools 的全新安装并产生了相同的错误.

错误出现在 cleaninstalltestdeploygenerate-sources、validatecompilepackageintegration-testverify以及干净的目标与其余目标的组合。它也与参数 -e-X 一起出现。曾尝试删除 m2e 存储库并从头开始下载,但再次失败。我应该提到它在 3 台不同的机器和所有上述系统的虚拟机中进行了测试,但它产生了相同的错误。

尝试了解决 slf4j-apilogback-core 依赖关系的所有不同 logback 配置(从 1.0.4 到 1.0.13) ,但都产生相同的错误:

<dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version></version>
</dependency>

尝试了所有不同的(从 1.6.1 到 1.7.5 )slf4j-simple 配置。

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

尝试了所有不同的(从 1.6.1 到 1.7.5 )log4j-over-slf4j 配置。

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>log4j-over-slf4j</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

尝试了所有不同的(从 1.6.1 到 1.7.5 )slf4j-jdk14 配置。

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-jdk14</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

尝试了所有不同的(从 1.6.1 到 1.7.5 )slf4j-log4j12 配置。

<dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-log4j12</artifactId>
     <version></version>
     <scope>compile</scope>
</dependency>

尝试了 slf4j-nop 1.7.5 配置。

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-nop</artifactId>
  <version>1.7.5</version>
  <scope>compile</scope>
</dependency>

最后但并非最不重要的一点是,尽管出现错误,日志仍被保存和打印。


重现错误的方法

下载 Eclipse Juno、Indigo 或 Kepler 32 或 64 位(所有安装都将 导致同样的错误)。

安装 m2e - Eclipse 的 Maven 集成

朱诺-http://download.eclipse.org/releases/juno 开普勒-http://download.eclipse.org/releases/kepler Indigo - http://download.eclipse.org/technology/m2e/releases/(目前不可用

将您的 m2e 版本更新为 1.1.0.20120530-0009,或 1.2.0.20120903-1050,或 1.3.0.20130129-0926,或1.4.0.20130601-0317 )


选择文件->新建->其他->Maven项目->点击下一步->选择 maven-archetype-quickstart 从目录->完成

选择文件->新建->其他->Maven项目->点击下一步->选择创建一个简单项目(跳过原型选择)->完成工件信息->完成

右键单击项目->运行方式->全新安装(或上述任何其他目标)

控制台的第一行是

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

附言现有项目将m2e版本更新为1.1.0.20120530-00091.2.0.20120903-10501.3.0.20130129-0926后会出现同样的错误强>,1.4.0.20130601-0317


更新

编辑

m2e 支持网站:

上述问题作为一个错误发布在 m2e 支持网站上,而 Igor Fedorenko 的回答是

没有立即取消此消息的计划。

查看以上bug请参考m2e official support site


编辑 2 m2e 版本 1.2.0.20120903-1050存在上述错误指示


编辑 3 m2e 版本 1.3.0.20130129-0926存在上述错误指示


编辑 4 m2e 版本 1.4.0.20130601-0317存在上述错误指示


编辑 5
                              ***Reported FIXED***
m2e 版本 1.5.0/Luna M3 报告上述错误已修复(目标里程碑 )。该版本尚未可供下载。 Luna M3 是 scheduled for Nov. 15th。 最新的开发版本可用here 有关 m2e 里程碑的更多信息,请访问 m2e main repository。

【问题讨论】:

@EliranMalka 它很长,但有原因。试图帮助人们避免问同样的问题,并包括每一个可能看起来必要的细节,以便了解他们是否面临同样的问题并没有让我有太多的选择。 :-) 我在尝试将 spring 数据与 neo4j 一起使用时出现此错误,我在 slf4j-api-1.7.7jcl-over-slf4j-1.7.7 中都有 slf4j,如果我尝试删除其中任何一个,我会收到一条错误消息他们的Logger 课程不见了。我该怎么办? @KonstantinosMargaritis 你能告诉我如何用 pom.xml 解决这个问题,我可以让它在本地设置上工作,但在 jenkins 上它总是失败。 你当前的设置是什么@vikramvi? @KonstantinosMargaritis 感谢您回复此问题。我意识到maven是Linux上的3.0版本升级到最新版本并再次尝试。这解决了这个问题。但是不得不花一整天的时间来找出可能出了什么问题。无论如何,谢谢。 【参考方案1】:

我也可以确认这个错误。

解决方法:是在m2eclipse中使用external maven,而不是嵌入的maven。

这分三个步骤完成:

1 在本地机器上安装maven(测试机器是Ubuntu 10.10)

mvn --version

Apache Maven 2.2.1 (rdebian-4) Java 版本:1.6.0_20 Java 主页: /usr/lib/jvm/java-6-openjdk/jre 默认语言环境:de_DE,平台 编码:UTF-8 操作系统名称:“linux” 版本:“2.6.35-32-generic” 拱: “amd64”系列:“unix”

2 在外部运行maven link how to run maven from console

> cd path-to-pom.xml
> mvn test
    [INFO] Scanning for projects...
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Simple
    [INFO]    task-segment: [test]
    [INFO] ------------------------------------------------------------------------
    [...]
    [INFO] Surefire report directory: [...]/workspace/Simple/target/surefire-reports
    
    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Running net.tverrbjelke.experiment.MainAppTest
    Hello World
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.042 sec
    
    Results :
    
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [...]

3 inside m2eclipse:从embedded maven切换到本地maven

找出本地 maven home 安装目录在哪里(mvn --version,或 google 为您的 MAVEN_HOME,我为 this helped me 即 /usr/share/maven2) 在 Eclipse 菜单->窗口->首选项->Maven->安装-> 中输入该字符串。那么您应该已经切换到新的外部 maven。 然后运行您的项目,例如“行家测试”。

错误消息应该消失了。

【讨论】:

我接受您的回答,因为这是绕过烦人错误的唯一解决方法。非常感谢您的分析回答。 :).. hmm 我在 Windows 上并更改为新的外部安装,但是错误仍然存​​在!? 对不起,它有效。请注意,运行配置上有一个 Maven 运行时(内部/外部)选项。因此,如果您使用已保存的,请务必更新它。 @stefan.at.wpf 很高兴听到它有效。如果你愿意,你可以订阅 bug 的邮件列表,如果有变化,你可以得到通知。 对我来说,#mvn --version 方便展示 MAVEN_HOME。【参考方案2】:

在 SLf4J 站点中有一个文档可以解决这个问题。我遵循了这一点,并将 slf4j-simple-1.6.1.jar 以及我已经拥有的 slf4j-api-1.6.1.jar 添加到我的应用程序中。这解决了我的问题

slf4j

【讨论】:

这个可行,在maven中可以添加:org.slf4jslf4j-simple1.XX //只需替换为您的版本 @Mohammed Irfan 我可能需要在 Eclipse 的 libs 文件夹中添加这个 twojar 吗? 我正在使用更高版本的 Maven 并遵循上述步骤,但这是导致问题消失的答案 - 谢谢 :)【参考方案3】:

如果您使用的是 Gradle,请添加:

dependencies  
... 
compile "org.slf4j:slf4j-simple:1.7.9" 
... 

【讨论】:

它在这里与 Gradle 一起工作!你能解释一下当我们添加那个库时会发生什么吗?【参考方案4】:

在使用 Gradle 时出现类似的错误,结果相同,并且能够通过以下方式解决:

//compile 'org.slf4j:slf4j-api:1.7.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.1'

Out-commented 行是导致错误输出的行。我相信您可以将其转移到 Maven。

【讨论】:

【参考方案5】:

将此代码粘贴到您的 pom.xml 文件中。它对我有用。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>

【讨论】:

它解决了“org.slf4j.impl.StaticLoggerBinder”错误,但现在正在记录所有内容,我将 log4j.xml 和 log4j.properties(一次一个)放在 src/test/resources 中,现在我项目中的所有框架都在记录大量消息,除了我自己的日志。【参考方案6】:

你没有在你的 maven 依赖文件中指定版本可能就是为什么它没有选择最新的 jar以及你需要另一个依赖 slf4j-log4j12 工件 id。在你的 pom 中包含这个文件

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.6</version>
</dependency>

如果错误仍未解决,请告诉我 我也推荐你看看this link

【讨论】:

检查了所有声明的版本。为了避免重复,我没有在那里声明。标签故意留空。请注意,上述问题已作为错误发布到 m2e 支持站点,除非被 m2e 开发人员压制,否则无法解决上述错误。我已多次阅读该网站,并包含了所有可能解决该问题的库。不幸的是,没有配置起作用,因为它与 m2e 而不是声明的依赖项有关。上述错误未显示在 Maven 控制台或 Eclipse 中的 Netbeans.ONLY 中。 slf4j-log4j12 是与 slf4j-simple、slf4j-jdk14 和 logback-classic 一起的另一个绑定。上述任何依赖项都应该解决了绑定问题。正如我之前解释的那样,问题出在 m2e 上。还是谢谢。【参考方案7】:

一直在关注问题已经浮出水面。相信对于遇到同样问题的其他人来说,这将是一本好书:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=387064

【讨论】:

请提供完整的答案,而不仅仅是链接。 @Prince 如果您阅读了问题描述,您会发现“要查看上述错误,请参阅 m2e 官方支持网站”的部分内容指向您提到的网址。 糟糕.. 我的错。诚挚的歉意!【参考方案8】:

我的 Spring Boot - Gradle 应用程序在 Eclipse Luna 上运行时遇到了类似的问题。 我可以通过在项目的 .classpath 中手动添加一个条目来解决它

<classpathentry sourcepath="C:/Users/<username>/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.7.7/3150039466ad03e6ef1c7ec1c2cbb0d96710cf64/slf4j-simple-1.7.7-sources.jar" kind="lib" path="C:/Users/<username>/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.7.7/8095d0b9f7e0a9cd79a663c740e0f8fb31d0e2c8/slf4j-simple-1.7.7.jar"/>

想法是遵循this 解决方案。但如何实施取决于具体情况。一种修复方法是我上面使用的方法。

希望这会有所帮助。

【讨论】:

【参考方案9】:

我在使用 java 编写 Kafka 生产者程序时遇到了同样的问题。此错误是由于错误的 slf4j 库引起的。使用下面的 slf4j-simple maven 依赖项来解决您的问题。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>

【讨论】:

【参考方案10】:

我有同样的问题。我用这种方法解决了。 将此依赖项添加到 maven "pom.xml" 并重新加载 maven。而不是尝试运行您的代码。 ` org.slf4j slf4j-nop 2.0.0-alpha5 测试

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.0-alpha5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>2.0.0-alpha5</version>
    </dependency>`

【讨论】:

【参考方案11】:
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-nop</artifactId>
        <version>2.0.0-alpha5</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.0-alpha5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>2.0.0-alpha5</version>
    </dependency>

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案12】:

这不是错误消息,而是警告。 在他们的网站上非常清楚地解释为:

当在类路径上找不到 SLF4J 提供程序时,会报告此警告,即不是错误消息。将 slf4j-nop.jar slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar 或 logback-classic.jar 中的一个(也是唯一一个)放在类路径上应该可以解决问题。请注意,这些提供程序必须针对 slf4j-api 1.8 或更高版本。

在没有提供者的情况下,SLF4J 将默认为无操作 (NOP) 记录器提供者。

https://www.slf4j.org/codes.html#StaticLoggerBinder

【讨论】:

以上是关于SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”。错误的主要内容,如果未能解决你的问题,请参考以下文章

无法加载类“org.slf4j.impl.StaticLoggerBinder”错误

休眠异常无法加载类“org.slf4j.impl.StaticLoggerBinder”

Play/Scala 2.5 SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”

休眠/Oracle 序列不工作

HBase 安装之后版本的验证的bug:(错误的替换找不到或无法加载主类SLF4J)

Log4j和SLF4J日志错误