2013-08-24 59 views
2

我想在一個Eclipse項目中使用log4j.2.x進行日誌記錄。我的conf文件名爲log4j2.xml,它直接在java項目下,並且在classpath中有必要的jar。當我測試時,我看到下面的錯誤消息。任何人都可以告訴我這個解決方案嗎? log4j2.xml:線程「main」中的異常java.lang.NoClassDefFoundError:org/slf4j/ILoggerFactory

<?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");}}  
+0

我覺得這已經是一個重複的問題。 – Woot4Moo

+0

[線程中的異常「main」java.lang.NoClassDefFoundError]的可能重複(http://stackoverflow.com/questions/17354790/exception-in-thread-main-java-lang-noclassdeffounderror) – Woot4Moo

+0

它不是真的該問題的重複。這涉及到一個意想不到的(對OP)的依賴;見答案。 –

回答

8

你缺少你的classpath slf4j.jar運行程序時。要了解SLF4J和log4j的之間的依賴關係,下載罐子等,請點擊此鏈接:

http://www.slf4j.org

+0

嗨Ahsan,非常感謝你的快速輸入..
只是fyi,我使用最新的log4j [link](http://logging.apache.org/log4j/2.x/download.html )
那個slf4j jar會使用這個最新版本嗎?
提前謝謝! –

+1

現在我添加了從http://www.slf4j下載的「slf4j-1.7.5」中的罐子後,出現了下面的錯誤。org請幫助我。java.lang.IllegalStateException:slf4j-impl jar與log4j-to-slf4j jar(從SLF4J到Log4j的第一個路由調用,從Log4j到SLF4J的第二個調用) \t at org。 apache.logging.slf4j.SLF4JLoggerContextFactory。 (SLF4JLoggerContextFactory.java:40) \t在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法) \t在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) –

+1

有人可以告訴我這個錯誤的解決方案? java.lang.IllegalStateException:slf4j-impl jar與log4j-to-slf4j jar(從SLF4J到Log4j的第一個路由調用,從Log4j到SLF4J的第二個路由調用) \t at org.apache.logging.slf4j.SLF4JLoggerContextFactory。 (SLF4JLoggerContextFactory.java:40) –

0

這可能是因爲你的類路徑中沒有正確加入!確保在類路徑中使用正確的log4j jar。你正在使用哪個版本?我正在使用log4j-1.2.15,它工作正常!

0

僅包含相關的log4j jar文件(版本2),這將解決此錯誤。在我的情況下,對於在log4j中提到的同一個錯誤,我已經刪除了除「log4j-api-2.0-beta9.jar」和「log4j-core-2.0-beta9.jar」之外的所有log4j jar文件,這已經解決了問題並按預期工作。錯誤不是信息豐富的,我最終下載了許多其他的jar文件,但當然這並不起作用。只包括相關的罐子應該解決這個問題。

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 
+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 –

+0

謝謝Pranav。這本來是對Juned的回答的討論的評論,但我沒有足夠的代表。抱歉 – mojo

0

此修復程序是爲特定的Web應用程序:

我關閉過程中遇到類似的問題的出現NoClassDefFoundError。除了mojo列出的jar文件外,我還必須包含log4j-web-xx.jar並解決了這個問題。

說明可以在這裏找到:http://logging.apache.org/log4j/2.x/manual/webapp.html

2

停止增加額外的jar文件。 INFACT只有兩個必須的jar 1. log4japi.jar 2的log4j-core.jar添加

這樣可以解決問題

相關問題