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 IDE(Indigo、Juno 和 Kepler(32 位和 64 位版本))李> 平台:Windows、Ubuntu、Mac m2e 版本: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 依赖项。
新建 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 Classic、Juno Modeling tools、Kepler Standard、Kepler Modeling Tools 的全新安装并产生了相同的错误.
错误出现在 clean、install、test、deploy、generate-sources、validate、compile、package、integration-test、verify以及干净的目标与其余目标的组合。它也与参数 -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 集成
朱诺-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-0009、1.2.0.20120903-1050、1.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.7
和 jcl-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中可以添加:如果您使用的是 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”