线程“main”中的异常 java.lang.NoClassDefFoundError: org/slf4j/ILoggerFactory
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18421091/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/ILoggerFactory
提问by Srikanth Nakka
I am trying to use log4j.2.x in an Eclipse project for logging. My conf file named as log4j2.xml is directly under java project and I have necessary jars in classpath. When I test, I see below error messages. Can anybody tell me the solution for this? log4j2.xml:
我正在尝试在 Eclipse 项目中使用 log4j.2.x 进行日志记录。我命名为 log4j2.xml 的 conf 文件直接在 java 项目下,我在类路径中有必要的 jars。测试时,我看到以下错误消息。谁能告诉我这个问题的解决方案?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>
Errors in Console:
控制台中的错误:
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.access0(URLClassLoader.java:71)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.net.URLClassLoader.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.run(URLClassLoader.java:366)
at java.net.URLClassLoader.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
My Java File:
我的 Java 文件:
public class Browserbot {
static Logger logger = LogManager.getLogger(Browserbot.class.getName());
public static void main(String[] args){
logger.error("File Not Found");}}
采纳答案by Juned Ahsan
You are missing slf4j.jar
in your classpath while running the program. To understand the dependency between slf4j and log4j, to download the jar, etc, follow this link:
slf4j.jar
运行程序时,您的类路径中丢失了。要了解 slf4j 和 log4j 之间的依赖关系、下载 jar 等,请访问以下链接:
回答by Mercenary
This could be because your classpath has not been added correctly! Make sure you use the right log4j jar in your classpath. Which version are you using? I am using log4j-1.2.15 and it works fine!
这可能是因为您的类路径未正确添加!确保在类路径中使用正确的 log4j jar。您使用的是哪个版本?我正在使用 log4j-1.2.15,它工作正常!
回答by SContributor
Include only relevant log4j jar files (version 2.) , that would resolve this error. In my case for the same error that has mentioned in question on log4j, I had removed all of the log4j jar files except :"log4j-api-2.0-beta9.jar" and "log4j-core-2.0-beta9.jar",this has resolved the problem and worked as expected. Error is not informative and I ended up with downloading many other jar files, but of course that did not work. Including only relavant jars should resolve this problem.
仅包含相关的 log4j jar files (version 2.) ,这将解决此错误。就我在 log4j 上提到的相同错误而言,我删除了所有 log4j jar 文件,除了:“log4j-api-2.0-beta9.jar”和“log4j-core-2.0-beta9.jar”,这已经解决了问题并按预期工作。错误没有提供信息,我最终下载了许多其他 jar 文件,但当然没有用。只包含相关的 jars 应该可以解决这个问题。
回答by mojo
I use the following:
我使用以下内容:
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
回答by Vasu Kargi
This fix is specific for web applications:
此修复特定于 Web 应用程序:
I ran into a similar problem with the NoClassDefFoundError during shutdown. In addition to the jar files listed by mojo, I also had to include log4j-web-xx.jar and that fixed the problem.
我在关机期间遇到了与 NoClassDefFoundError 类似的问题。除了 mojo 列出的 jar 文件,我还必须包含 log4j-web-xx.jar 并解决了问题。
Explanation can be found here: http://logging.apache.org/log4j/2.x/manual/webapp.html
可以在这里找到解释:http: //logging.apache.org/log4j/2.x/manual/webapp.html
回答by ajaykumar kasam
stop adding additional jar files. infact have only two required jars 1. log4japi.jar 2. log4j-core.jar
停止添加额外的 jar 文件。事实上只有两个必需的 jar 1. log4japi.jar 2. log4j-core.jar
this resolves the issue
这解决了这个问题