SLF4J: путь к классу содержит несколько привязок SLF4J


206

Я получаю следующую ошибку. Кажется, есть несколько каркасов, связанных с sl4j. Не уверен, как решить эту проблему. Любая помощь очень ценится.

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

15
Решено Использование <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> в зависимостях (из pom.xml), которые вызвали конфликт, помогли решить проблему
user1493140


6
Вы уже проверили slf4j.org/codes.html#multiple_bindings, как указано в предупреждении?
Питер Келлер

7
Возможно, было бы лучше добавить ответ (автоматический ответ) на этот вопрос и пометить его как «Принятый», поэтому вопрос будет отображаться как «Решено» в поисках SO
Роберто

1
Роберто, спасибо за отзыв. Я скопировал решение из комментария и разместил его как ответ.
user1493140

Ответы:


125

Решено путем добавления следующего исключения в зависимости (от pom.xml), которые вызвали конфликт.

<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
</exclusions> 

10
который зависимости вызвали конфликт в этом случае, у меня есть зависимости дерева есть 3 упоминание SLF4J
PUG

22
чтобы узнать, как log4j идет по вашему пути, запустите mvn dependency: tree и comb, затем добавьте приведенный выше фрагмент к этой зависимости в вашем pom.xml
cyber-monk

1
@ user1493140 Тем не менее это не работает для меня. <зависимость> <groupId> log4j </ groupId> <artifactId> log4j </ artifactId> <версия> 1.2.17 </ version> <exclusion> <exclusion> <groupId> org.slf4j </ groupId> <artifactId> slf4j- log4j12 </ artifactId> </ exclusion> </ exclusion> </ dependency>
Ашок Кумар Ганесан

1
для меня очередная баночка причина. Мне пришлось исключить артефакты с идентификатором slf4j-nop и slf4j-jdk14. Зависимость, которая вызвала конфликт для меня, была клевер-мавен-плагин
ihebiheb

версия ( slf4j-log4j12) применима для всех? или мы должны узнать версию из дерева зависимостей mvn: tree ?
Лэй Ян

59

Версия Gradle;

configurations.all {
    exclude module: 'slf4j-log4j12'
}

2
Импорт моделей из основного приложения в среду автоматизации ... это решило мою проблему с Gradle. ти.
Будет

1
Есть ли муравейная версия этого?
Баладжи Боггарам Раманараян

1
нет: муравей не зависимый инструмент. Настоятельно рассмотрите возможность переноса вашей сборки в gradle.
Мэтью Марк Миллер

1
Настоятельно рекомендуем перенести вашу сборку на sbt :)
ioleo

2
Превосходно. Спас меня от адской зависимости несколько часов!
Jseals

24

Ошибка, вероятно, дает больше информации, как это (хотя ваши имена банок могут отличаться)

SLF4J: Обнаружена привязка в [jar: file: / D: /Java/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar! / Org / slf4j / impl / StaticLoggerBinder .class] SLF4J: Обнаружена привязка в [jar: file: / D: /Java/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.8.2/log4j-slf4j-impl-2.8.2.jar ! /org/slf4j/impl/StaticLoggerBinder.class]

Заметил, что конфликт происходит от двух банок, названных logback-classic-1.2.3и log4j-slf4j-impl-2.8.2.jar.

Запустите mvn dependency:treeв этом проекте родительскую папку pom.xml, получив:

конфликт дерева зависимостей

Теперь выберите тот, который вы хотите игнорировать (может потребоваться деликатное усилие, мне нужно больше помощи в этом)

Я решил не использовать один импортируемый из spring-boot-starter-data-jpa(верхней зависимости) через spring-boot-starterи через spring-boot-starter-logging, П становится:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

в вышеупомянутом пом spring-boot-starter-data-jpaбудет использовать spring-boot-starterнастроенный в том же файле, который исключает logging(он содержит logback)


1
Спасибо за представление mvn dependency:tree. Это очень полезно ...
Ян Лохман

10

Версия Sbt:

Добавить exclude("org.slf4j", "slf4j-log4j12")к зависимости, которая транзитивно включает slf4j-log4j12. Например, при использовании Spark с Log4j 2.6:

libraryDependencies ++= Seq(
  // One SLF4J implementation (log4j-slf4j-impl) is here:
  "org.apache.logging.log4j" % "log4j-api" % "2.6.1",
  "org.apache.logging.log4j" % "log4j-core" % "2.6.1",
  "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.6.1",
  // The other implementation (slf4j-log4j12) would be transitively
  // included by Spark. Prevent that with exclude().
  "org.apache.spark" %% "spark-core" % "1.5.1" exclude("org.slf4j", "slf4j-log4j12")
)

1
Что такое Sbt?
Петрус Терон

3
Простой инструмент для сборки *
Бенни

4
<!--<dependency>-->
     <!--<groupId>org.springframework.boot</groupId>-->
     <!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->

Я решил удалить это: spring-boot-starter-log4j2


непонятно: вы имеете в виду удалить / комментировать над разделом xml или добавить?
Лей Ян


3

Просто используйте только необходимые зависимости, а не все :))). Для меня, для нормальной работы процесса регистрации вам нужна эта зависимость исключить других из pom.xml

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

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

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

3

Это проблема, потому что класс StaticLoggerBinder.class принадлежит двум разным jar-файлам. ссылки на этот класс из logback-classic-1.2.3.jar и того же класса также ссылаются на log4j-slf4j-impl-2.10.0.jar. обе банки в classpath. Следовательно, между ними существует конфликт. Это причина того, что файл журнала не генерируется, даже если файл log4j2.xml находится в classpath [src / main / resource].

Мы выбрали один из jar, я рекомендую использовать файл log4j-slf4j-impl-2.10.0.jar и исключить файл logback-classic-1.2.3.jar. Решение: откройте pom-файл и просмотрите иерархию зависимостей [eclipse] или выполните
команду mvn dependency: tree, чтобы найти дерево зависимостей и источник зависимости, которые загружают зависимость. найти конфликтующие зависимости и исключить их. Для приложения Springboot попробуйте это.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
        </dependency>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

This is working fine for me after struggling a lots.

2

... org.codehaus.mojo cobertura-maven-plugin 2.7 test ch.qos.logback logback-классические инструменты com.sun ...

## Я исправил это

... org.codehaus.mojo cobertura-maven-plugin 2.7 test ch.qos.logback logback-классические инструменты com.sun ...


2

Для меня это оказалось проблемой Eclipse / Maven после переключения с log4j на logback. Загляните в свой .classpathфайл и найдите строку"log4j" .

В моем случае у меня было следующее: <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.7.1/slf4j-log4j12-1.7.1.jar"/> <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar" />

Удаление этих записей из файла (или вы можете восстановить его) исправило проблему.


2

Для меня ответом было заставить Maven восстановить. В Затмении:

  1. Щелкните правой кнопкой мыши проект-> Maven -> Отключить Maven nature
  2. Щелкните правой кнопкой мыши проект-> Spring Tools> Обновить зависимости Maven.
  3. Щелкните правой кнопкой мыши проект-> Настроить> Преобразовать проект Maven

0

У меня такая же проблема. В моем pom.xml у меня были оба

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>

Когда я удалил зависимость spring-boot-starter-web, проблема была решена.


-1

Сочетание <scope>provided</scope>и <exclusions>не работает для меня.

Я должен был использовать это:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <scope>system</scope>
    <systemPath>${project.basedir}/empty.jar</systemPath>
</dependency>

Где empty.jarнаходится фляга, в которой буквально ничего нет?


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.