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

时间:2013-08-24 17:12:40

标签: java log4j

我正在尝试在Eclipse项目中使用log4j.2.x进行日志记录。我的名为log4j2.xml的conf文件直接在java项目下,我在classpath中有必要的jar。当我测试时,我看到下面的错误消息。谁能告诉我解决方案呢? 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");}}       

6 个答案:

答案 0 :(得分:8)

运行程序时,类路径中缺少slf4j.jar。要了解slf4j和log4j之间的依赖关系,要下载jar等,请点击以下链接:

http://www.slf4j.org

答案 1 :(得分:2)

停止添加其他jar文件。事实上只有两个必需的罐子 1. log4japi.jar 2. log4j-core.jar

这解决了问题

答案 2 :(得分:1)

我使用以下内容:

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

仅包含相关的log4j jar文件(版本2),这将解决此错误。在我的情况下针对log4j上提到的相同错误,我删除了所有log4j jar文件,除了:“log4j-api-2.0-beta9.jar”和“log4j-core-2.0-beta9.jar”,这解决了问题,并按预期工作。错误没有提供信息,我最终下载了许多其他jar文件,但当然这不起作用。只包括相关罐子就可以解决这个问题。

答案 5 :(得分:0)

此修复程序特定于Web应用程序:

我在关机期间遇到了与NoClassDefFoundError类似的问题。除了mojo列出的jar文件之外,我还必须包含log4j-web-xx.jar并解决了这个问题。

可在此处找到解释:http://logging.apache.org/log4j/2.x/manual/webapp.html