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 파일에) dependecies에
user1493140


6
경고에 명시된대로 slf4j.org/codes.html#multiple_bindings 를 이미 확인 했습니까 ?
피터 켈러

7
어쩌면이 질문에 대한 답변 (자동 답변)을 추가하고 "허용됨"으로 표시하는 것이 좋습니다. 따라서 질문은 SO 검색에서 "해결됨"으로 표시됩니다
Roberto

1
Roberto, 피드백 감사합니다. 의견에서 솔루션을 복사하여 답변으로 게시했습니다.
user1493140

답변:


125

충돌을 일으킨 종속성 (pom.xml)에 다음 제외를 추가하여 해결되었습니다.

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

10
이 경우 충돌이 발생하는 종속성 트리에는 slf4j에 대한 3 가지 언급이 있습니다
PUG

22
log4j에이 경로 실행 MVN 의존성에 점점 방법을 찾아 :을 통해 나무와 빗, 다음의 pom.xml에 그 의존성에 위의 코드 조각을 추가
사이버 승려

1
@ user1493140 여전히 작동하지 않습니다. <종속성> <groupId> log4j </ groupId> <artifactId> log4j </ artifactId> <version> 1.2.17 </ version> <exclusions> <exclusions <exclusion> <groupId> org.slf4j </ groupId> <artifactId> slf4j- log4j12 </ artifactId> </ exclusion> </ exclusions> </ dependency>
Ashok kumar Ganesan '12

1
나에게 또 다른 항아리가 원인을 전쟁. ID가 slf4j-nop 및 slf4j-jdk14 인 아티팩트를 제외해야했습니다. 나를 위해 충돌을 일으킨 종속성은 clover-maven-plugin
ihebiheb

버전 ( slf4j-log4j12)이 모두에게 적용됩니까? 또는 mvn dependency : tree 에서 버전을 찾아야 합니까?
레이 양

59

Gradle 버전;

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

2
기본 응용 프로그램에서 자동화 프레임 워크로 모델 가져 오기. gradle 문제를 해결했습니다. 타이.
Will

1
이 작업을 수행하는 개미 버전이 있습니까?
Balaji Boggaram Ramanarayan

1
아니요 : ant는 종속성 인식 도구가 아닙니다. 빌드를 gradle로 포팅하는 것이 좋습니다.
Matthew Mark Miller

1
빌드를 sbt로 포팅하는 것이
좋습니다

2
우수한. 몇 시간의 의존성 지옥에서 나를 구해 냈습니다!
jseals

24

오류는 아마도 이와 같은 더 많은 정보를 제공 할 것입니다 (jar 이름은 다를 수 있지만)

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. 정말 도움이됩니다 ...
Jan Lochman

10

SBT 버전 :

exclude("org.slf4j", "slf4j-log4j12")전 이적으로 포함하는 종속성에 추가 합니다 slf4j-log4j12. 예를 들어 Log4j 2.6과 함께 Spark를 사용하는 경우 :

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는 무엇을 의미합니까?
Petrus Theron

3
간단한 빌드 도구 *
Benny

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

나는 이것을 삭제하여 해결했다 : spring-boot-starter-log4j2


명확하지 않음 : xml 섹션 위의 삭제 / 주석 또는 추가를 의미합니까?
레이 양

3

그 jar 파일을 무시하거나 제거했습니다.

여기에 이미지 설명을 입력하십시오


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에있는 jar. 따라서 그들 사이에 갈등이 있습니다. 클래스 경로 [src / main / resource]에 log4j2.xml 파일이 있어도 로그 파일이 생성되지 않는 이유입니다.

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 테스트 ch.qos.logback 로그 백 클래식 도구 com.sun ...

## 나는 이것을 고쳤다

... org.codehaus.mojo cobertura-maven-plugin 2.7 테스트 ch.qos.logback 로그 백 클래식 도구 com.sun ...


2

나에게 log4j에서 logback으로 전환 한 후 Eclipse / Maven 문제로 판명되었습니다. .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 자연 비활성화를 마우스 오른쪽 버튼으로 클릭하십시오.
  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>

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말 그대로 아무것도없는 jar 파일은 어디에 있습니까 ?


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.