2013-08-24 2 views
2

Я пытаюсь использовать log4j.2.x в проекте Eclipse для ведения журнала. Мой файл conf с именем log4j2.xml находится непосредственно под проектом java, и у меня есть необходимые банки в classpath. Когда я тестирую, я вижу ниже сообщения об ошибках. Может ли кто-нибудь сказать мне решение для этого? 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

Это не действительно дубликат этого Вопроса. Это связано с непредвиденной (для ОП) зависимостью; см. ответ. –

ответ

8

У вас не хватает 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

Теперь я получил следующую ошибку после добавления баннеров в «slf4j-1.7.5», загруженных с http: //www.slf4j.org Пожалуйста, помогите мне в этом .. java.lang.IllegalStateException: slf4j-impl jar является взаимоисключающим с банком log4j-to-slf4j (первые маршруты от SLF4J до Log4j, второй от Log4j до SLF4J) \t at org. apache.logging.slf4j.SLF4JLoggerContextFactory. (SLF4JLoggerContextFactory.java:40) \t на sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method) \t в sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:57) –

+1

Может кто-нибудь сказать мне решение этой ошибки? java.lang.IllegalStateException: slf4j-impl jar является взаимоисключающим с логом log4j-to-slf4j (первые маршруты от SLF4J до Log4j, второй из Log4j в SLF4J) \t на org.apache.logging.slf4j.SLF4JLoggerContextFactory. (SLF4JLoggerContextFactory.java:40) –

0

Это может быть потому, что ваш путь к классам не было добавлено! Убедитесь, что вы используете правильную банку log4j в своем пути к классам. Какую версию вы используете? Я использую log4j-1.2.15, и он отлично работает!

0

Включите только соответствующие файлы журнала log4j (версия 2.), которые разрешат эту ошибку. В моем случае за ту же ошибку, о которой упоминалось в log4j, я удалил все файлы jar logjj, за исключением: «log4j-api-2.0-beta9.jar» и «log4j-core-2.0-beta9.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

Спасибо, Пранав. Это должно было быть комментарием к обсуждению ответа Юнеда, но мне не хватило репутации. сожалею – mojo

0

Это исправление специфична для веб-приложений:

Я столкнулся с аналогичной проблемой с NoClassDefFoundError во время остановки. В дополнение к файлам jar, перечисленным mojo, мне также пришлось включить log4j-web-xx.jar, и это устранило проблему.

Объяснение можно найти здесь: http://logging.apache.org/log4j/2.x/manual/webapp.html

2

прекратить добавление дополнительных файлов фляги. Infact имеют только две необходимые банки 1. log4japi.jar 2. log4j-core.jar

это решает проблему

Смежные вопросы