SLF4J: Не удалось загрузить класс «org.slf4j.impl.StaticLoggerBinder». ошибка


115
  • Относительно Eclipse IDE ( Indigo , Juno и Kepler (32- и 64-битные версии))
  • Платформы : Windows , Ubuntu , Mac
  • Версия m2e : 1.1.0.20120530-0009 , 1.2.0.20120903-1050 , 1.3.0.20130129-0926 ,
    1.4.0.20130601-0317

Общая информация

Вышеупомянутая ошибка возникла после обновления m2e до версии 1.1. После удаления m2e 1.1 и отката до m2e 1.0 все работало нормально. Я попытался повторить проблему в Windows и Ubuntu, и это дало мне ту же ошибку. Были протестированы многочисленные конфигурации slf4j-api и logback, но ни одна из них не работает.

Ошибка появляется в любом проекте maven даже без объявления зависимости slf4j .

  • Новый проект Maven -> maven-archetype-quickstart

    и

  • Новый проект Maven -> Простой проект без выбора архетипа

    результат к

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

Среды тестирования и конфигурации

Протестировано с Eclipse Indigo и Eclipse Juno (32- и 64-разрядная версии) на Mac, 32-разрядной версии в Ubuntu и 64- и 32-разрядной версии в Windows. Протестировал свежие установки Juno Classic , Juno Modeling tools , Kepler Standard , Kepler Modeling Tools и выдал ту же ошибку.

Ошибка появляется при очистке , установке , тестировании , развертывании , генерации источников , проверке , компиляции , упаковке , интеграционном тестировании , проверке и комбинациях чистой цели с остальными целями. Он также появляется с параметрами -e и -X . Была попытка удалить репозиторий m2e и загрузить его с нуля, но снова безуспешно. Следует упомянуть, что он был протестирован на трех разных машинах и виртуальном ящике всех вышеперечисленных систем, но вызывал ту же ошибку.

Пробовал все различные конфигурации логбэка (от 1.0.4 до 1.0.13), которые разрешают зависимости slf4j-api и logback-core , но все выдают одну и ту же ошибку:

<dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version></version>
</dependency>

Пробовал все разные (от 1.6.1 до 1.7.5) конфигурации slf4j-simple .

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

Пробовал все разные (от 1.6.1 до 1.7.5) конфигурации log4j-over-slf4j .

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>log4j-over-slf4j</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

Пробовал все разные (от 1.6.1 до 1.7.5) конфигурации slf4j-jdk14 .

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-jdk14</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

Пробовал все разные (от 1.6.1 до 1.7.5) конфигурации slf4j-log4j12 .

<dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-log4j12</artifactId>
     <version></version>
     <scope>compile</scope>
</dependency>

Пробовал конфигурацию slf4j-nop 1.7.5 .

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-nop</artifactId>
  <version>1.7.5</version>
  <scope>compile</scope>
</dependency>

И последнее, но не менее важное: журналы сохраняются и распечатываются, несмотря на ошибку.


Способы воспроизведения ошибки

  • Загрузите Eclipse Juno, Indigo или Kepler 32 или 64 бит (все установки будут вызывать одну и ту же ошибку).

    • Установить m2e - Интеграция Maven для Eclipse

      ИЛИ

    • Обновите свою версию m2e до 1.1.0.20120530-0009 , или 1.2.0.20120903-1050 , или 1.3.0.20130129-0926 , или 1.4.0.20130601-0317 )


    • Выберите File-> New-> Other-> Maven Project-> Нажмите Next-> Выберите
      maven-archetype-quickstart из каталога-> Finish

      ИЛИ

    • Выберите File-> New-> Other-> Maven Project-> нажмите Next-> выберите Create a simple project (пропустить выбор архетипа) -> Complete Artifact info-> Finish

  • Щелкните правой кнопкой мыши проект-> Запускается как-> чистая установка (или любая другая цель, упомянутая выше)

Первая строка на консоли будет

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

PS Существующие проекты будут выдавать ту же ошибку после обновления версии m2e до 1.1.0.20120530-0009 , 1.2.0.20120903-1050 , 1.3.0.20130129-0926 , 1.4.0.20130601-0317


Обновления

РЕДАКТИРОВАТЬ

Сайт поддержки m2e:

  • Вышеупомянутый вопрос был опубликован как ошибка на сайте поддержки m2e, и Игорь Федоренко ответил, что

    В ближайшее время нет планов по подавлению этого сообщения.

    Для просмотра вышеуказанной ошибки посетите официальный сайт поддержки m2e.


РЕДАКТИРОВАТЬ 2

  • Указанная выше индикация ошибки присутствует также в m2e версии 1.2.0.20120903-1050.


РЕДАКТИРОВАТЬ 3

  • Выше индикация ошибки является присутствует также M2e версии 1.3.0.20130129-0926


РЕДАКТИРОВАТЬ 4

  • Выше индикация ошибки является присутствует также M2e версии 1.4.0.20130601-0317


РЕДАКТИРОВАТЬ 5

                              ***Reported FIXED***
  • Вышеупомянутая ошибка сообщается как исправленная для m2e версии 1.5.0 / Luna M3 ( Target Milestone ). Версия еще не доступна для скачивания.
  • Luna M3 будет запланирован на 15 ноября .
  • Последняя сборка разработчика доступна здесь
  • Более подробную информацию о вехах m2e вы можете найти в основном репозитории m2e .

@EliranMalka Это долго, но не без причины. Попытки помочь людям не задавать одни и те же вопросы и включить все детали, которые могут показаться необходимыми, чтобы понять, сталкиваются ли они с той же проблемой, не давали мне слишком много вариантов. :-)
Константинос Маргаритис

Я получил эту ошибку при попытке использовать данные Spring с neo4j, которые у меня есть slf4jв обоих, slf4j-api-1.7.7и, jcl-over-slf4j-1.7.7если я попытаюсь удалить кого-либо из них, я получаю сообщение об ошибке, в котором говорится, что их Loggerкласс отсутствует. Что я должен делать?
user1885868

@KonstantinosMargaritis, не могли бы вы рассказать, как исправить это с помощью pom.xml, я мог бы заставить его работать при локальной настройке, но на jenkins он всегда терпит неудачу.
vikramvi

Какая у вас сейчас настройка @vikramvi?
Константинос Маргаритис

@KonstantinosMargaritis, спасибо, что вернулись к этому вопросу. Я понял, что maven - это версия 3.0 в Linux, обновленная до последней версии, и попытался снова. это устранило проблему. Но пришлось потратить целый день, пытаясь выяснить, что может быть не так. В любом случае спасибо.
vikramvi

Ответы:


75

Я тоже могу подтвердить эту ошибку.

Обходной путь : использовать внешний maven внутри m2eclipse вместо встроенного maven.

Это делается в три этапа:

1 Установите maven на локальный компьютер (тестовая машина была Ubuntu 10.10)

mvn --version

Apache Maven 2.2.1 (rdebian-4) Версия Java: 1.6.0_20 Домашняя страница Java: / usr / lib / jvm / java-6-openjdk / jre Локаль по умолчанию: de_DE, кодировка платформы: UTF-8 Имя ОС: "linux" версия: "2.6.35-32-generic" arch: "amd64" Семейство: "unix"

2 Запустите maven внешнюю ссылку, как запустить maven с консоли

> cd path-to-pom.xml
> mvn test
    [INFO] Scanning for projects...
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Simple
    [INFO]    task-segment: [test]
    [INFO] ------------------------------------------------------------------------
    [...]
    [INFO] Surefire report directory: [...]/workspace/Simple/target/surefire-reports
    
    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Running net.tverrbjelke.experiment.MainAppTest
    Hello World
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.042 sec
    
    Results :
    
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [...]

3 внутри m2eclipse: переключитесь со встроенного maven на локальный maven

  • узнайте, где находится локальный каталог домашней установки maven ( mvn --versionили Google для вас MAVEN_HOME, для меня это помогло мне, что есть /usr/share/maven2)
  • в eclipse Menu-> Window-> Preferences-> Maven-> Installation-> введите эту строку. Тогда вы должны были переключиться на свой новый внешний maven.
  • затем запустите свой проект как, например, «maven test».

Сообщение об ошибке должно исчезнуть.


1
Я принимаю ваш ответ, поскольку это единственный способ обойти досадную ошибку. Большое спасибо за аналитический ответ. :) ..
Константинос Маргаритис

3
хм, я в Windows и перешел на новые внешние установки, но ошибка все еще существует !?
stefan.at.wpf

4
извините, это работает. Обратите внимание, что в конфигурациях запуска есть опция для среды выполнения maven (внутренняя / внешняя). поэтому, если вы используете сохраненный, обязательно обновите его.
stefan.at.wpf

@ stefan.at.wpf Приятно слышать, что это работает. Если хотите, вы можете подписаться на рассылку сообщения об ошибке и получать информацию, если что-то изменится.
Константинос Маргаритис

2
Для меня #mvn --versionудобно показать MAVEN_HOME.
biaobiaoqi

25

Для решения этой проблемы на сайте SLf4J есть документация. Я последовал этому и добавил slf4j-simple-1.6.1.jar в свое приложение вместе с slf4j-api-1.6.1.jar, который у меня уже был. Это решило мою проблему.

slf4j


4
это работает, в maven можно добавить: <dependency> <groupId> org.slf4j </groupId> <artifactId> slf4j-simple </artifactId> <version> 1.XX </version> </dependency> // Просто замените на Ваша версия
Энрике Сан Мартин

@ Мохаммед Ирфан, может мне нужно добавить этот twojar в папку libs в eclipse?
Эрам

1
Я использую более позднюю версию Maven и выполнил описанные выше действия, но это был ответ, который заставил проблему исчезнуть - спасибо :)
Роб Уилсон

15

Если вы используете Gradle, добавьте это:

dependencies { 
... 
compile "org.slf4j:slf4j-simple:1.7.9" 
... 
}

Здесь он работает с Gradle !! Вы можете объяснить, что происходит, когда мы добавляем эту библиотеку?
Фелипе Перейра

5

Была аналогичная ошибка с тем же результатом с Gradle, и я смог решить ее, выполнив следующие действия:

//compile 'org.slf4j:slf4j-api:1.7.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.1'

Не прокомментированная строка - это та, которая вызвала ошибку. Я считаю, что вы можете передать это Maven.


3

Вы не указали версию в своем файле зависимостей maven, возможно, поэтому он не
выбирает последнюю банку, а также вам нужна другая зависимость с slf4j-log4j12идентификатором артефакта.
Включите это в свой файл pom

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.6</version>
</dependency>

Сообщите мне, если ошибка все еще не устранена,
я также рекомендую вам просмотреть эту ссылку


3
Все заявленные версии были проверены. Я не объявлял это там во избежание повторения. Тег намеренно оставлен пустым. Пожалуйста, обратите внимание, что указанная выше проблема была опубликована как ошибка на сайте поддержки m2e, и нет способа исправить указанную выше ошибку, если она не устранена разработчиками m2e. Я читал этот веб-сайт много раз и включил все возможные библиотеки, которые могут решить эту проблему. К сожалению, ни одна конфигурация не сработала, потому что она связана с m2e, а не с заявленными зависимостями. Вышеупомянутая ошибка не отображается в консоли maven или Netbeans.ТОЛЬКО в Eclipse.
Константинос Маргаритис

1
slf4j-log4j12 - еще одна привязка вместе с slf4j-simple, slf4j-jdk14 и logback-classic. Любая из вышеперечисленных зависимостей должна была решить проблему с привязкой. Как я объяснил ранее, проблема связана с m2e. Спасибо, в любом случае.
Константинос Маргаритис

3

Вставьте этот код в свой файл pom.xml. Меня устраивает.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>

Он решает ошибку org.slf4j.impl.StaticLoggerBinder, но теперь все регистрирует, я помещаю log4j.xml и log4j.properties (по одному) в src / test / resources, теперь все фреймворки в моем проекте регистрируют тонны сообщений, кроме моих собственных журналов.
OJVM

1

Я долго искал проблему, обнаружив ее. Поверьте, это будет хорошее чтение для тех, кто придет сюда с той же проблемой:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=387064


пожалуйста, дайте полный ответ, а не просто ссылку.
slfan

@Prince Если вы читаете описание вопроса, вы можете найти часть, которая гласит: «Для просмотра вышеуказанной ошибки обратитесь на официальный сайт поддержки m2e», которая указывает на URL, который вы упомянули.
Константинос Маргаритис

Упс .. Моя плохая. Искренние извинения!
Prince

1

У меня была аналогичная проблема с моим приложением Spring Boot - Gradle, работающим на Eclipse Luna. Я мог бы решить эту проблему, вручную добавив запись в мой проект .classpath

<classpathentry sourcepath="C:/Users/<username>/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.7.7/3150039466ad03e6ef1c7ec1c2cbb0d96710cf64/slf4j-simple-1.7.7-sources.jar" kind="lib" path="C:/Users/<username>/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.7.7/8095d0b9f7e0a9cd79a663c740e0f8fb31d0e2c8/slf4j-simple-1.7.7.jar"/>

Идея состоит в том, чтобы следовать этому решению. Но как реализовать, зависит от конкретного случая. Один из способов исправления - тот, который я использовал выше.

Надеюсь это поможет.


0

Это не сообщение об ошибке, а предупреждение. На их веб-сайте это очень четко объясняется как:

Это предупреждение, т. Е. Не сообщение об ошибке, выдается, когда на пути к классу не может быть найден ни один поставщик SLF4J. Размещение одного (и только одного) из slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar или logback-classic.jar в пути к классам должно решить проблему. Обратите внимание, что эти поставщики должны нацеливаться на slf4j-api 1.8 или новее.

В отсутствие провайдера SLF4J по умолчанию будет неактивным провайдером логгеров.

https://www.slf4j.org/codes.html#StaticLoggerBinder


0

У меня была такая же проблема при написании продюсерской программы Kafka с использованием java. Эта ошибка возникает из-за неправильной библиотеки slf4j. используйте приведенную ниже зависимость slf4j-simple maven, которая устранит вашу проблему.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.