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


115
  • 关于Eclipse IDEIndigoJunoKepler(32和64位版本))
  • 平台WindowsUbuntuMac
  • M2E版本1.1.0.20120530-00091.2.0.20120903-10501.3.0.20130129-0926
    1.4.0.20130601-0317

基本信息

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

即使未声明slf4j依赖关系,该错误也会出现在任何Maven项目中。

  • 新的Maven项目-> maven-archetype-quickstart

  • New Maven Project->没有原型选择的简单项目

    结果到

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

测试环境和配置

已在Mac上使用Eclipse Indigo和Eclipse Juno(分别为32位和64位),在Ubuntu上为32位以及在Windows上为64位和32位进行了测试。测试了Juno ClassicJuno建模工具Kepler StandardKepler建模工具的新安装,并且产生了相同的错误。

错误显示为cleaninstalltestdeploygenerate-sourcesvalidatecompilepackageintegration-testverify以及目标clean和其余目标的组合。它也与-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-Maven Integration for Eclipse

      要么

    • 将您的m2e版本更新为1.1.0.20120530-00091.2.0.20120903-10501.3.0.20130129-09261.4.0.20130601-0317


    • 选择File-> New-> Other-> Maven Project->单击Next->从目录中选择
      maven-archetype-quickstart-> Finish

      要么

    • 选择文件->新建->其他-> 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-0009后PS现有项目将产生同样的错误 1.2.0.20120903-1050 1.3.0.20130129-0926 1.4.0.20130601-0317


更新

编辑

m2e支持站点:

  • 上面的问题被发布为m2e支持站点中的错误,Igor Fedorenko的回答是

    没有立即计划禁止显示此消息。

    要查看上述错误,请访问m2e官方支持网站


编辑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目标里程碑),上述错误已报告为固定。该版本尚未可供下载。
  • 月神M3定于11月15日
  • 最新的开发版本在这里可用
  • 您可以在m2e主存储库中找到有关m2e里程碑的更多信息。

@EliranMalka很长,但是有原因。试图帮助人们避免提出相同的问题,并提供所有似乎必要的细节,以了解他们是否面临相同的问题,这并没有给我太多选择。:-)
Konstantinos Margaritis

同时试图使用Spring数据与Neo4j的我得到这个错误我有slf4j两个slf4j-api-1.7.7jcl-over-slf4j-1.7.7,如果我试图删除它们中的任何一个,我得到一个错误信息说,他们Logger班缺失。我该怎么办?
user1885868

@KonstantinosMargaritis您能否告诉我如何使用pom.xml修复此问题,我可以在本地安装程序上使用它,但在jenkins上却总是失败。
vikramvi '16

您当前设置的@vikramvi是什么?
康斯坦丁诺斯·玛格丽特斯

@KonstantinosMargaritis感谢您再次参与讨论。我意识到maven是Linux上的3.0版本,已升级到最新版本,然后重试。这解决了问题。但是不得不花一整天的时间来找出可能出问题的地方。不管怎么说,多谢拉。
vikramvi '16

Answers:


75

我也可以确认此错误。

解决方法:在m2eclipse中使用外部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 链接如何从控制台运行Maven

> 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个内部m2eclipse:嵌入式Maven切换到本地Maven

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

错误消息应该消失了。


1
我接受您的回答,因为这是绕过烦人错误的唯一解决方法。非常感谢您的分析回答。:) ..
Konstantinos Margaritis 2012年

3
嗯,我在Windows上,更改为新的外部安装,但是错误仍然存​​在!
stefan.at.wpf

4
对不起,它有效。请注意,运行配置中有Maven运行时(内部/外部)选项。因此,如果您使用保存的,请确保对其进行更新。
stefan.at.wpf 2013年

@ stefan.at.wpf很高兴听到它起作用。如果需要,您可以订阅该错误的邮件列表,以防万一发生任何变化。
Konstantinos Margaritis

2
对我来说,#mvn --version显示MAVEN_HOME很方便。
biaobiaoqi

25

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

slf4j


4
这行得通,在maven中可以添加:<dependency> <groupId> org.slf4j </ groupId> <artifactId> slf4j-simple </ artifactId> <version> 1.XX </ version> </ dependency> //只需替换为您的版本
恩里克·圣马丁2014年

@Mohammed Irfan是否需要在Eclipse的libs文件夹中添加此twojar?
Erum

1
我使用的是Maven的更高版本,并且已经执行了上述步骤,但这是导致问题消失的答案-谢谢:)
Rob Wilson

15

如果您使用的是Gradle,请添加以下内容:

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

它在这里与Gradle一起使用!您能否解释一下,当我们添加该库时会发生什么?
菲利佩·佩雷拉

5

在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'

注释掉的行是导致错误输出的那一行。我相信您可以将其转移到Maven。


3

您尚未在maven依赖文件中指定版本,这可能就是为什么它不选择最新的jar
以及您需要具有slf4j-log4j12工件id的另一个依赖关系的原因。
将此包含在您的pom文件中

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

让我知道如果错误仍未解决,
我也建议您查看此链接


3
声明的所有版本均已检查。我没有在那里声明以避免重复。标签有意留空。请注意,以上问题是作为错误发布到m2e支持站点的,除非m2e开发人员禁止,否则无法解决以上错误。我已经多次阅读该网站,并且包括所有可能解决此问题的库。不幸的是,没有一种配置有效,因为它与m2e而不是声明的依赖关系有关。上面的错误在Maven控制台或Netbeans.ONLY在Eclipse中不显示。
康斯坦丁诺斯·玛格丽特斯

1
slf4j-log4j12是与slf4j-simple,slf4j-jdk14和logback-classic一起的另一个绑定。以上任何依赖项都应该已经解决了绑定问题。正如我之前解释的那样,问题在于m2e。不管怎么说,还是要谢谢你。
Konstantinos Margaritis 2012年

3

将此代码粘贴到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中,现在我项目中的所有框架都在记录日志除了我自己的日志外,还有大量的消息。
OJVM

1

一直在寻找已经浮出水面的问题。相信对于那些来这里遇到同样问题的人来说,这将是一本好书:

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


请提供完整的答案,而不仅仅是链接。
slfan 2014年

@Prince如果您阅读问题描述,则可以找到一个部分,该部分指出“要查看上述错误,请参阅m2e官方支持网站”,该部分指向您提到的URL。
Konstantinos Margaritis 2014年

糟糕,我的糟糕。诚挚的道歉!
亲王

1

我在Eclipse Luna上运行的Spring Boot-Gradle应用程序也遇到了类似的问题。我可以通过在项目的.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"/>

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

希望这可以帮助。


0

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

当在类路径上找不到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


0

使用Java编写Kafka生产程序时,我遇到了同样的问题。由于错误的slf4j库而出现此错误。使用下面的slf4j-简单的maven依赖关系可以解决您的问题。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.