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

时间:2012-08-11 18:44:41

标签: eclipse maven m2eclipse slf4j logback

  • 关于 Eclipse IDE Indigo Juno Kepler (32位和64位版本))
  • 平台 Windows Ubuntu Mac
  • m2e version 1.1.0.20120530-0009 1.2.0.20120903-1050 1.3.0.20130129-0926
    1.4.0.20130601-0317

常规信息

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

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

  • New Maven Project - > 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 Classic Juno建模工具 Kepler标准版 Kepler建模工具的全新安装并产生了相同的错误。

错误显示为清除安装测试部署生成源< / strong>,验证编译集成测试验证目标清理与其余目标的组合。它似乎还带有参数 -e -X 。尝试删除m2e存储库并从头开始下载但是再次没有成功。我应该提到它在3个不同的机器和虚拟盒中测试了所有上述系统,但它产生了相同的错误。

尝试解析 slf4j-api logback-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集成

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


    • 选择文件 - &gt;新建 - &gt;其他 - &gt; Maven项目 - &gt;点击下一步 - &gt;选择
      目录中的maven-archetype-quickstart-&gt;完成

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

  • 右键单击项目 - &gt;运行As-&gt;干净安装(或上述任何其他目标)

控制台上的第一行是

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.

P.S。将m2e版本更新为1.1.0.20120530-0009 1.2.0.20120903-1050 1.3.0.20130129-0926 后,现有项目将产生相同的错误strong>, 1.4.0.20130601-0317

<小时/>

更新

修改

m2e支持网站:

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

      

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

    要查看上述错误,请参阅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找到。

10 个答案:

答案 0 :(得分:73)

我也可以确认这个错误。

解决方法:是在m2eclipse中使用外部maven ,而不是它的嵌入式maven。

这是在三个步骤中完成的:

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

  

mvn --version

     

Apache Maven 2.2.1(rdebian-4)Java版本:1.6.0_20 Java home:   / usr / lib / jvm / java-6-openjdk / jre默认语言环境:de_DE,platform   编码:UTF-8操作系统名称:“linux”版本:“2.6.35-32-generic”arch:   “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] ------------------------------------------------------------------------
    [...]
在m2eclipse中

3:embedded maven切换到本地maven

  • 找出本地maven主页安装目录的位置(mvn --version,或google为MAVEN_HOMEthis helped me/usr/share/maven2}
  • in eclipse Menu-&gt; Window-&gt; Preferences-&gt; Maven-&gt; Installation-&gt;输入该字符串。然后你应该切换到你的新外部专家。
  • 然后运行您的项目,例如“maven测试”。

错误信息应该消失。

答案 1 :(得分:25)

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

slf4j

答案 2 :(得分:8)

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

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

答案 3 :(得分: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-comment线是导致错误输出的线。我相信你可以将它转移到Maven。

答案 4 :(得分:2)

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

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

如果错误仍未解决,请告诉我 我还建议您查看this link

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

一直在看这个问题已经浮出水面了。相信对于那些带着同样问题来到这里的人来说,这将是一个很好的读物:

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

答案 7 :(得分: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"/>

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

希望这有帮助。

答案 8 :(得分: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

答案 9 :(得分:0)

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

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