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> в залежності (of pom.xml), яка спричинила конфлікт, допомогла вирішити проблему
user1493140


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

7
Можливо, було б краще додати відповідь (автоматичну відповідь) на це питання та позначити її як "Прийнято", тож запит з'явиться як "Вирішений" у пошуках SO
Роберто

1
Роберто, дякую за відгук. Я скопіював рішення з коментаря і розмістив його як відповідь.
користувач1493140

Відповіді:


125

Вирішено шляхом додавання наступних виключень у залежності (pom.xml), що спричинили конфлікт.

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

10
яка залежність спричинила конфлікт у цьому випадку, у мене в дереві залежностей є 3 згадки про slf4j
PUG

22
щоб дізнатись, як log4j потрапляє на ваш шлях, запустіть mvn залежність: дерево та розчешіть, а потім додайте фрагмент вище до цієї залежності у своєму pom.xml
cyber-monk

1
@ user1493140 Досі це не працює для мене. 1.2.17 </version> <excptions> <exclusion> <groupId> org.slf4j </groupId> <artifactId> slf4j- log4j12 </artifactId> </exclusion> </excptions> </dependency>
Ashok kumar Ganesan

1
для мене чергова банка війни причиною. Мені довелося виключати артефакти з id slf4j-nop та slf4j-jdk14. Залежність, яка спричинила конфлікт для мене, була плагіном clover-maven
ihebiheb

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

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>

вгорі pom 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
Simple Build Tool *
Бенні

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 належить до двох різних банок. на цей клас посилання з logback-classic-1.2.3.jar і того ж класу також посилаються з log4j-slf4j-impl-2.10.0.jar. обидва банку в класі. Отже, між ними виникає конфлікт. Це причина, що файл журналу не є генерацією, навіть незважаючи на те, що файл log4j2.xml у classpath [src / main / resource].

Ми вибрали один з jar, рекомендую використовувати файл log4j-slf4j-impl-2.10.0.jar та виключити файл logback-classic-1.2.3.jar. Рішення: відкрийте файл Pom і перегляньте Ієрархію залежності [eclipse] або запустіть
mvn залежність: команда дерева, щоб дізнатися дерево залежності та джерело залежності, яке завантажує залежність. знайти конфліктуючу залежність та виключити їх. Для програми 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 тест ch.qos.logback зворотний зв'язок-класичні інструменти com.sun ...

Я вирішив це

... org.codehaus.mojo cobertura-maven-plugin 2.7 тест ch.qos.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

Для мене відповідь полягала в тому, щоб змусити відбудову Мавена. У затемненні:

  1. Клацніть правою кнопкою миші на проект-> Maven -> Вимкнути природу Maven
  2. Клацніть правою кнопкою миші на проект-> Інструменти весни> Оновити залежність 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>

Коли я видалив залежність весняного завантаження-стартера-веб, проблема була вирішена.


-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знаходиться файл jar з буквально нічого в ньому.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.