Подтвердить что ты не робот

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

Мое приложение должно быть развернуто как на tcServer, так и на WebSphere 6.1. Это приложение использует ehCache и поэтому требует slf4j в качестве зависимости. В результате я добавил флешку slf4j-api.jar(1.6) в свой файл военного файла.

Приложение отлично работает в tcServer, за исключением следующей ошибки:

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.

Однако, когда я развертываю в WebSphere, я получаю java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder.

Я проверил пути к классам обоих серверов приложений, и нет другого контейнера slf4j.

Есть ли у кого-нибудь идеи, что может происходить здесь?

4b9b3361

Ответ 1

У меня была такая же проблема с WebSphere 6.1. Как отметил Цэки, в нем использовались тонны банок, которые использовал WebSphere, и один из них указывал на более старую версию slf4j.

Откат No-Op происходит только с slf4j -1.6+, поэтому все, что старше этого, выдает исключение и останавливает развертывание.

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

Это решило мою проблему. Надеюсь, это поможет другим, у кого эта проблема.

Ответ 2

Это для тех, кто пришел сюда из поиска Google.

Если вы используете maven, просто добавьте следующие

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

Или

   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.7.5</version>
   </dependency>
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.6.4</version>
   </dependency>

Ответ 3

Вам нужно добавить следующий файл jar в свой путь к классам: slf4j-simple-1.6.2.jar. Если у вас его нет, загрузите его. См. http://www.slf4j.org/codes.html#multiple_bindings

Ответ 4

Просто добавьте это в свой pom.xml:

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

Ответ 5

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

В https://mvnrepository.com/artifact/org.slf4j/slf4j-simple Вы найдете последнюю версию SLF4J Simple Binding. Выберите тот, который подходит вам лучше (по-прежнему 1.7.26 из 2019-02 - это стабильная версия по состоянию на 2019-07) и включите его в ваш pom.xml.

Для вашего удобства здесь показаны некоторые зависимости, но они могут быть неактуальными, когда вы читаете это!

Альфа-версия 2019-06

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>2.0.0-alpha0</version>
</dependency>

Бета-версия февраля 2019 года

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.8.0-beta4</version>
</dependency>

Стабильная версия 2019-08

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version>1.7.28</version>
   <scope>test</scope>
</dependency>

Я удалил часть теста области благодаря комментарию ниже.

Ответ 6

Я столкнулся с такой же ошибкой. Я настроил slf4j-api, slf4j-log4j12 и log4j, в моей локальной разработке. Вся конфигурация была в порядке, но зависимость slf4j-log4j12, которую я скопировал из mvnrepository, имела область проверки <scope>test</scope>. Когда я удаляю это, все прекрасно.

Несколько раз глупые ошибки ломают голову;)

Ответ 7

Например, мы должны увидеть заметку из предупреждения, например. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. ,

Вы можете найти причину, по которой это предупреждение приходит.
Добавление одной из *slf4j-nop.jar из *slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar или logback-classic.jar* к пути класса должно решить проблему.

compile "org.slf4j:slf4j-api:1.6.1" compile "org.slf4j:slf4j-simple:1.6.1"

например, добавьте вышеприведенный код в свой build.gradle или соответствующий код в pom.xml для проекта maven.

Ответ 8

положить файл slf4j-log4j12-1.6.4.jar в classpath сделает трюк.

Ответ 9

Если вы используете maven для управления зависимостями, вы можете просто добавить следующую зависимость в pom.xml

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

Для пользователей, не являющихся владельцами Maven Просто загрузите библиотеку и поместите ее в свой путь к проекту.

Здесь вы можете увидеть детали: http://www.mkyong.com/wicket/java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/

Ответ 10

SLF4j является абстракцией для различных фреймворков каротажа. Следовательно, помимо slf4j, вы должны включить любую вашу структуру ведения журнала, такую ​​как log4j или logback (и т.д.) В свой путь к классам.
Чтобы получить идею, обратитесь к First Baby Step в http://logback.qos.ch/manual/introduction.html

Ответ 11

Slf4j - это фасад для базовых фреймворков регистрации, таких как log4j, logback, java.util.logging.

Чтобы подключиться к базовым фреймворкам, slf4j использует привязку.

  • log4j - slf4j-log4j12-1.7.21.jar
  • java.util.logging - slf4j-jdk14-1.7.21.jar и т.д.

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

Для зависимости от maven,

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

Эта зависимость в дополнение к slf4j-log4j12-1.7.21.jar, она потянет slf4j-api-1.7.21.jar, а также log4j-1.2.17.jar в ваш проект

Ссылка: http://www.slf4j.org/manual.html

Ответ 12

Я столкнулся с аналогичной проблемой с приложениями Spring -boot-2 с библиотекой Java 9.

Добавление следующей зависимости в моем pom.xml решило проблему для меня:

    <dependency>
        <groupId>com.googlecode.slf4j-maven-plugin-log</groupId>
        <artifactId>slf4j-maven-plugin-log</artifactId>
        <version>1.0.0</version>
    </dependency>

Ответ 13

В случае с Websphere у вас установлена ​​более старая версия slf4j-api.jar, 1.4.x. или 1.5.x где-то лежит. Поведение, наблюдаемое на tcServer, то есть отказ от NOP, происходит в версиях slf4j версии 1.6.0 и более поздних. Убедитесь, что вы используете slf4j-api-1.6.x.jar на всех платформах и что более старая версия slf4j-api не помещается в путь класса.

Ответ 14

Я попал в эту проблему, когда получил следующую ошибку:

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.

когда я использовал slf4j-api-1.7.5.jar в своем libs.

Не смотря на то, что я пробовал использовать все предложенные дополнения, например slf4j-log4j12-1.7.5.jar, slf4j-simple-1.7.5, сообщение об ошибке все еще сохранялось. Проблема, наконец, была решена, когда я добавил slf4j-jdk14-1.7.5.jar в java libs.

Получите весь пакет slf4j на http://www.slf4j.org/download.html

Ответ 15

Чтобы решить эту проблему, добавьте следующие зависимости для pom.

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

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.25</version>
</dependency>

Ответ 16

Я работаю в проекте Struts2 + Spring. Поэтому ему нужна зависимость slf4j-api-1.7.5.jar.

Если я запускаю проект, я получаю ошибку, например

Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder"

Я решил свою проблему, добавив slf4j-log4j12-1.7.5.jar.

Итак, добавьте эту банку в свой проект, чтобы решить проблему.

Ответ 17

Как указано в Руководстве по SLF4J

Простой фасад ведения журнала для Java (SLF4J) служит простым фасадом или абстракцией для различных сред ведения журналов, таких как java.util.logging, logback и log4j.

а также

Предупреждение исчезнет, как только вы добавите привязку к вашему пути к классам.

Поэтому вы должны выбрать, какую привязку вы хотите использовать.

NoOp привязка (slf4j-nop)

Привязка для NOP, молча отбрасывая все записи.

Проверьте свежую версию на https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav

Простое связывание (slf4j-simple)

выводит все события в System.err. Печатаются только сообщения уровня INFO и выше. Эта привязка может быть полезна в контексте небольших приложений.

Проверьте свежую версию на https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav

Привязки для каркасов ведения журналов (java.util.logging, logback, log4j)

Вам нужна одна из этих привязок, если вы собираетесь записывать журнал в файл.

См. Описание и инструкции по адресу https://www.slf4j.org/manual.html#projectDep.


Мое мнение

Я бы порекомендовал Logback, потому что он является преемником проекта log4j.

Проверьте последнюю версию привязки для этого на https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav

Вы получаете консольный вывод из коробки, но если вам нужно записать логи в файл, просто поместите конфигурацию FileAppender в файл src/main/resources/logback.xml или в src/main/resources/logback.xml src/test/resources/logback-test.xml вот так:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/logs.log</file>

        <encoder>
            <pattern>%date %level [%thread] %logger{10} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

    <logger level="DEBUG" name="com.myapp"/>
</configuration>

(См. Подробное описание в руководстве: https://logback.qos.ch/manual/configuration.html).

Ответ 18

Я добавил эту зависимость, чтобы решить эту проблему:

https://mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.7.25

Ответ 19

В качестве альтернативы включению банок и чистых решений maven вы можете включить его из maven с помощью градиента.

Пример для версии 1.7.25

// https://mvnrepository.com/artifact/org.slf4j/slf4j-simple
api group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'

Поместите это в зависимости от вашего файла build.gradle.

Ответ 20

Согласно SLF4J официальная документация

Не удалось загрузить класс org.slf4j.impl.StaticLoggerBinder

Это предупреждающее сообщение сообщается, когда Класс org.slf4j.impl.StaticLoggerBinder не может быть загружен в Память. Это происходит, когда подходящее связывание SLF4J не может быть найдено на пути к классу. Размещение одного (и только одного) slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar или logback-classic.jar в пути класса должен решить проблему.

Просто добавьте эту банку вместе с slf4j api.jar в свой путь к классам, чтобы все было сделано. Желаем удачи.

Ответ 21

Я решаю его добавить эту библиотеку: slf4j-simple-1.7.25.jar Вы можете скачать это в официальном веб-сайте https://www.slf4j.org/download.html

Ответ 22

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

Поместите вышеупомянутую зависимость в файл pom.xml

Ответ 23

Я знаю, что этот пост немного стар, но в случае, если кто-то еще сталкивается с этой проблемой:

Добавьте slf4j-jdk14-X.X.X.jar в ваш CLASSPATH (где X.X.X - номер версии - например, slf4j-jdk14-1.7.5.jar).

НТН Питер

Ответ 24

Я использую Jena, и я добавляю зависимость коллектива к pom.xml

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

Я пытаюсь добавить slf4j-simple, но он просто исчезает из-за ошибки SLF4J: Ошибка загрузки класса "org.slf4j.impl.StaticLoggerBinder", но logback-classic показывает более подробную информацию.

Официальный

Ответ 25

решение указывается на официальном сайте:

Не удалось загрузить класс org.slf4j.impl.StaticLoggerBinder

Это предупреждающее сообщение сообщается, когда Класс org.slf4j.impl.StaticLoggerBinder не может быть загружен в Память. Это происходит, когда подходящее связывание SLF4J не может быть найдено на пути к классу. Размещение одного (и только одного) slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar или logback-classic.jar в пути класса должен решить проблему. ПОСКОЛЬКУ 1.6.0 Начиная с версии SLF4J версии 1.6, при отсутствии привязки, SLF4J по умолчанию выполнит операцию бездействия (NOP). Если ты ответственный за упаковку приложения и не заботятся о logging, а затем поместите slf4j-nop.jar в путь класса вашего приложение избавится от этого предупреждения. Обратите внимание, что встроенные такие компоненты, как библиотеки или рамки, не должны объявлять зависимость от любого связывания SLF4J, но зависит только от slf4j-api. Когда библиотека объявляет зависимость времени компиляции от привязки SLF4J, она налагает эту привязку на конечного пользователя, тем самым отрицая цель SLF4J.

Решение: я добавил в свой проект, используя исследование maven по intellij, и я выбрал slf4j-jdk14.jar.

Ответ 26

Скорее всего, ваша проблема возникла из-за <scope>test</scope> (в некоторых случаях также предоставляется <scope>provided</scope>), как упоминалось @thangaraj.

Документация гласит:

Эта область указывает, что зависимость не требуется для обычного использования приложения и доступна только для фаз компиляции и выполнения теста. Зависимости теста не являются транзитивными и присутствуют только для путей к классам тестирования и выполнения.

Итак, если вам не нужны зависимости для целей тестирования, вы можете использовать вместо (то, что вы увидите в mvnrepository):

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.7.24</version>
    <scope>test</scope>
</dependency>

Без каких-либо областей (по умолчанию будет область компиляции, если не предоставлена другая область):

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
</dependency>

Это так же, как:

 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
 <dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
   <scope>compile</scope>
 </dependency>

Ответ 27

Вот мои 5 центов...

У меня были те же проблемы при выполнении тестов. Поэтому я исправил это, добавив реализацию только для тестовой среды выполнения. Я использую Gradle для этого проекта.

//https://mvnrepository.com/artifact/ch.qos.logback/logback-classic

Группа testRuntimeOnly: 'ch.qos.logback', имя: 'logback-classic', версия: '1.2.3'

Ответ 28

Для меня проблема заключалась в следующем: используя Hibernate, я увидел, что он уже использовал slf4j, и он уже был в моем classpath, поэтому я решил использовать его. Следующий шаг - добавление imlementor для slf4j, поэтому я добавил в maven:

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

Но это не удалось с ошибкой! SLF4J: не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder"

Решение было таким: Hibernate-зависимость slf4j была версии 1.7.26, и я добавил второстепенную версию 1.7.25. Поэтому, когда я это исправил - все стало ОК

Ответ 29

Документация SparkJava api официально предоставляет ответ на этот вопрос. Проверьте эту ссылку и прокрутите немного вниз. http://sparkjava.com/documentation#examples-and-faq