IT story

SLF4J : 클래스 경로에 여러 SLF4J 바인딩이 포함됨

hot-time 2020. 5. 13. 08:06
반응형

SLF4J : 클래스 경로에 여러 SLF4J 바인딩이 포함됨


다음과 같은 오류가 발생합니다. 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.

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

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

Gradle 버전;

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

오류는 아마도이 같은 더 많은 정보를 제공합니다 (항아리 이름은 다를 수 있지만)

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)


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")
)

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

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


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

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


필요한 의존성 만 사용하고 전부는 아닙니다 :))). 나에게 로깅 프로세스의 정상적인 작업을 위해서는이 종속성이 필요합니다. 다른 것들을 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>

... org.codehaus.mojo cobertura-maven-plugin 2.7 test ch.qos.logback logback-classic tools com.sun ...

## I fixed with this

... org.codehaus.mojo cobertura-maven-plugin 2.7 test ch.qos.logback logback-classic tools com.sun ...


For me, it turned out to be an Eclipse/Maven issue after switch from log4j to logback. Take a look into your .classpath file and search for the string "log4j".

In my case I had the following there: <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" />

Removing those entries from the file (or you could regenerate it) fixed the issue.


For me the answer was to force a Maven rebuild. In Eclipse:

  1. Right click on project-> Maven -> Disable Maven nature
  2. Right click on project-> Spring Tools > Update Maven Dependencies
  3. Right click on project-> Configure > Convert Maven Project

This is issue because of StaticLoggerBinder.class class belongs to two different jars. this class references from logback-classic-1.2.3.jar and same class also referenced from log4j-slf4j-impl-2.10.0.jar. both of jar in classpath. Hence there is conflict between them. This is reason of log file is not generation even though log4j2.xml file in classpath [src/main/resource].

We have so select one of jar, I recommend use log4j-slf4j-impl-2.10.0.jar file and exclude logback-classic-1.2.3.jar file. Solution: open pom file and view the dependency Hierarchy [eclipse] or run
mvn dependency:tree command to find out the dependency tree and source of dependency that download the dependency. find the conflicting dependency and exclude them. For Springboot application try this.

<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.

조합 <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 파일은 어디에 있습니까 ?


.m2 디렉토리를 제거하는 것으로 보입니다.

mvn install -DskipTests -T 4 나를 위해이 문제를 해결했습니다.

참고 URL : https://stackoverflow.com/questions/14024756/slf4j-class-path-contains-multiple-slf4j-bindings

반응형