"main"线程中的异常:java.lang.NoClassDefFoundError:org/slf4j/ILoggerFactory

3

我正在尝试在Eclipse项目中使用log4j.2.x进行日志记录。我的配置文件名为log4j2.xml,直接位于Java项目下,我已将必要的jar包添加到了classpath中。当我测试时,出现以下错误信息。请问有人能告诉我解决方法吗? log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> <configuration status="WARN">  <appenders>
<Console name="Console" target="SYSTEM_OUT">
  <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>  </appenders>  <loggers>
<root level="error">
  <appender-ref ref="Console"/>
</root>  </loggers></configuration>

控制台中的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/ILoggerFactory
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at org.apache.logging.slf4j.SLF4JLoggerContextFactory.<init>(SLF4JLoggerContextFactory.java:34)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:84)
at Browserbot.<clinit>(Browserbot.java:17)Caused by: java.lang.ClassNotFoundException: org.slf4j.ILoggerFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 23 more

我的 Java 文件:

public class Browserbot {
static Logger logger = LogManager.getLogger(Browserbot.class.getName());

public static void main(String[] args){

    logger.error("File Not Found");}}       

我觉得这一定是一个重复的问题。 - Woot4Moo
可能是重复的问题:Exception in thread "main" java.lang.NoClassDefFoundError - Woot4Moo
这并不是那个问题的重复。这个问题涉及到一个意外的(对于OP来说)依赖关系;请参见答案。 - Stephen C
@SrikanthN “我在类路径中有必要的JAR包” - 你能展示一下列表吗? - Alex K
6个回答

9
你运行程序时,在类路径中缺少 slf4j.jar。要了解 slf4j 和 log4j 之间的依赖关系,下载 jar 等,请访问以下链接:http://www.slf4j.org

嗨,Ahsan,非常感谢您的快速回复。<br/> 仅供参考,我正在使用最新的log4j [链接](http://logging.apache.org/log4j/2.x/download.html)<br/>那么slf4j jar能与这个最新版本一起工作吗?<br/> 预先感谢您!! - Srikanth Nakka
1
现在我在添加从http://www.slf4j.org下载的“slf4j-1.7.5”中的jar后遇到以下错误,请帮忙解决。java.lang.IllegalStateException: slf4j-impl jar与log4j-to-slf4j jar互斥(第一个将SLF4J调用路由到Log4j,第二个将Log4j调用路由到SLF4J) at org.apache.logging.slf4j.SLF4JLoggerContextFactory.<init>(SLF4JLoggerContextFactory.java:40) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) - Srikanth Nakka
1
有人能告诉我如何解决这个错误吗?java.lang.IllegalStateException: slf4j-impl jar与log4j-to-slf4j jar互斥(前者将SLF4J的调用路由到Log4j,后者将Log4j的调用路由到SLF4J) 在org.apache.logging.slf4j.SLF4JLoggerContextFactory.<init>(SLF4JLoggerContextFactory.java:40)处。 - Srikanth Nakka

2
我使用以下内容:
slf4j-api-1.7.5.jar
slf4j-ext-1.7.5.jar
log4j-slf4j-impl-2.0-beta9.jar
log4j-core-2.0-beta9.jar
log4j-api-2.0-beta9.jar

这并没有提供问题的答案。如果要批评或请求作者澄清,请在他们的帖子下留言 - 您始终可以在自己的帖子上发表评论,并且一旦您拥有足够的声望,您将能够评论任何帖子 - Pranav Singh
谢谢Pranav。这是本来应该作为对Juned答案讨论的评论,但我没有足够的声望。抱歉。 - mojo

2

停止添加额外的jar文件。事实上,只需要两个必需的jar文件 1. log4japi.jar 2. log4j-core.jar

这样就解决了问题。


0

这个修复方法仅适用于Web应用程序:

我在关闭过程中遇到了与NoClassDefFoundError类似的问题。除了mojo提到的jar文件外,我还需要包含log4j-web-xx.jar来解决问题。

有关说明可以在这里找到:http://logging.apache.org/log4j/2.x/manual/webapp.html


0

只包含相关的log4j jar文件(版本2),这将解决此错误。在我的情况下,对于在log4j问题中提到的相同错误,我已经删除了除“log4j-api-2.0-beta9.jar”和“log4j-core-2.0-beta9.jar”之外的所有log4j jar文件,这解决了问题并按预期工作。错误信息不够详细,我最终下载了许多其他jar文件,但当然没有起作用。只包含相关的jar文件应该解决这个问题。


0
这可能是因为您的类路径没有正确添加!确保在类路径中使用正确的log4j jar。您使用的是哪个版本?我正在使用log4j-1.2.15,它可以正常工作!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接