SpringBoot에서 Logback 비활성화


118

Springboot는 Tomcat과 함께 Logback을 사용하도록 자동 구성됩니다. 이것을 비활성화하고 클래스 경로에서 제공하는 것을 사용하고 싶습니다.

아래 오류 메시지입니다.

LoggerFactory는 Logback LoggerContext가 아니지만 Logback은 클래스 경로에 있습니다. Logback 또는 경쟁 구현 (class org.slf4j.impl.SimpleLoggerFactory)을 제거하십시오. [org.slf4j.impl.SimpleLoggerFactory] 클래스의 객체는 ch.qos.logback.classic.LoggerContext 클래스의 인스턴스 여야합니다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>1.0.1.RELEASE</version>
    </parent>

    <groupId>com.fe</groupId>
    <artifactId>cloudapp</artifactId>
    <version>1.0.0</version>
    <name>Withinet-PaaS</name>
    <description>Develop your web applications in on our infrastructure and we will worry about administration and scalability of your app.</description>

    <properties>
        <java.version>1.7</java.version>
        <guava.version>16.0.1</guava.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.8</version>
    </dependency>
        <dependency>
        <groupId>com.withinet.cloudapp</groupId>
    <artifactId>slave</artifactId>
    <version>1.0.0</version>    
        </dependency>
        <dependency>
            <groupId>org.apache.wicket</groupId>
            <artifactId>wicket-core</artifactId>
            <version>6.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.0.Final</version>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.4</version>
        </dependency>

        <!-- Spring Boot -->

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

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

        <!-- Hibernate validator -->

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>


        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator-annotation-processor</artifactId>
            <version>4.1.0.Final</version>
        </dependency>

        <!-- Guava -->

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>

        <!-- Java EE -->

        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>

        <!--  Search -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>4.8.0</version>
        </dependency>

        <!--  Security 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>

        <plugins>

            <!-- Spring Boot Maven -->

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.withinet.cloud.Application</mainClass>
                    <layout>JAR</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>
</project>

답변:


143

spring-boot-starter 및 spring-boot-starter-web 모두에 제외를 추가하여 충돌을 해결하십시오.

<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-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

3
제외 항목을 추가하면 다음과 같은 결과가 발생하기 때문에 작동하지 않습니다 java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory.
Ariel

2
이 작업을 수행하면 클래스 경로에 log4j와 같은 고유 한 로거를 제공해야합니다. 응용 프로그램에서 기본 로거를 제외하려는 이유는 무엇입니까?
FOO

1
각 항아리에서 '탐색'을 수행하지 않고 어떤 항아리가 로그 백을 선언하는지 알아내는 방법이 있습니까? 그리고 감사합니다! 이것은 나를 도와
vivek_ganesan

4
mvn dependency : tree -Dverbose -Dincludes = spring-boot-starter-logging
FOO

이 예외를 각 spring-boot-starter- * 종속성에 추가해야하는 것은 매우 번거 롭습니다. Gradle은 적어도 전역 제외를 허용하는 것 같습니다. 이것만으로도 Maven에서 전환을 고려할 수 있습니다.
scottysseus

59

Gradle에 더 좋고 더 일반적인 솔루션을 추가하려면 (모든 인스턴스가 제외됩니다) :

configurations {
    all*.exclude module : 'spring-boot-starter-logging'
}

에서 https://docs.gradle.org/current/userguide/dependency_management.html


1
그것은 저와 적어도 7 명의 다른 사람들에게 효과적입니다. 귀하의 구성이나 환경에 대한 문제가 내 솔루션에 대한 반대표가되어야한다고 생각하지 않습니다 (내가받은 반대표가 귀하의 의견에서 나온 것이라고 가정했습니다. 내가 틀렸다면 사과드립니다).
HankCa 2016-06-08

1
다른 모든 CONFIGS를 시도, 이것은 나를 위해 일한 유일한 하나입니다
timothyclifford

이것은 내가 여전히 참조 작동하지 않습니다spring-boot-starter-logging
아담 Arold

40

Gradle에 솔루션을 추가하려면.

dependencies {
    compile ('org.springframework.boot:spring-boot-starter') {
        exclude module : 'spring-boot-starter-logging'
    }
    compile ('org.springframework.boot:spring-boot-starter-web') {
        exclude module : 'spring-boot-starter-logging'
    }
}

14

전체 spring-boot-starter-logging모듈 을 제외 할 필요가 없다는 것을 알았습니다 . 필요한 것은 org.slf4j:slf4j-log4j12모듈 을 제외하는 것 입니다.

이것을 Gradle 빌드 파일에 추가하면 문제가 해결됩니다.

configurations {
    runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
    compile.exclude group: "org.slf4j", module: "slf4j-log4j12"
}

자세한 내용은 다른 StackOverflow 답변 을 참조하십시오.


11

나는 내 문제를 해결하기 위해 이것을 좋아한다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>


9

pom.xml에서 spring-boot-starter-test를 찾아 다음과 같이 수정합니다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>commons-logging</artifactId>
                <groupId>commons-logging</groupId>
            </exclusion>
        </exclusions>
        <scope>test</scope>
    </dependency>

다음과 같은 오류가 수정되었습니다.

_Caused by: java.lang.IllegalArgumentException:_ **LoggerFactory** is not a **Logback LoggerContext** but *Logback* is on the classpath.

Either remove **Logback** or the competing implementation

(_class org.apache.logging.slf4j.Log4jLoggerFactory_
loaded from file: 

**${M2_HOME}/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.6.2/log4j-slf4j-impl-2.6.2.jar**).

If you are using WebLogic you will need to add **'org.slf4j'** to prefer-application-packages in WEB-INF/weblogic.xml: **org.apache.logging.slf4j.Log4jLoggerFactory**

7

나를 위해 일을 따라

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

이것으로 나는 여전히 최종 아티팩트에서 로그 백 JAR을보고 있었다 (부트의 Maven 플러그인 대신 어셈블리 플러그인을 사용하고 있었으므로 실제로 부트 패키징에서 작동하는지 확실하지 않음)
Janaka Bandara

7

선호하는 로거가 정확히 무엇인지, 그리고 그것을 시도하고 설치하기 위해 무엇을했는지 말하면 도움이 될 수 있습니다. 어쨌든 Spring Boot는 클래스 경로에있는 모든 작업을 시도하므로 로그 백을 원하지 않으면 클래스 경로에서 제거하십시오. docs 에 log4j 에 대한 지침이 있지만 지원되는 다른 로깅 시스템 (slf4j, log4j 또는 java util)에도 동일한 내용이 적용됩니다.


3
slf4j를 사용하고 내 maven pom 파일에서 로그 백을 볼 수 없습니다.
FOO

Logback slf4j 로거입니다. pom을 공유 할 수 있습니까?
Dave Syer 2014-06-01

다른 slf4j 구현을 명시 적으로 볼 수 없으므로 전 이적으로 제공되어야합니다. m2e (Eclipse) 또는 "mvn dependency : tree"와 같은 도구를 사용하여 종속성을 시각화 할 수 있습니다. Eclipse 도구에는 종속성을 제외하기위한 GUI도 있습니다 (이것이 필요합니다-그중 하나를 제외하십시오). 이미 완전한 slf4j (jcl 브리지 포함)가있는 경우 "spring-boot-starter-logging"을 제외하는 것으로 충분할 수 있습니다.
데이브 Syer

5

아래에서이 문제를 해결했습니다.

compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0'){
    exclude module: 'log4j-slf4j-impl'
    exclude module: 'logback-classic'
}
compile('org.springframework.boot:spring-boot-starter-web'){
    exclude module: 'log4j-slf4j-impl'
    exclude module: 'logback-classic'
}

5

이것은 나를 위해 잘 작동했습니다.

configurations {
    all*.exclude module : 'spring-boot-starter-logging'
}

그러나 maven 사용자에게는 작동하지 않습니다 . 내 모든 종속성은 libs.gradle에 있었고 다른 파일에는 원하지 않았습니다. 따라서이 문제는 해결되었다 추가 exclude module : 'spring-boot-starter-loggingspring-boot-starter-data-jpa, spring-boot-starter-test부팅 단어로 거의 모든 것을한다.

최신 정보

내 새 프로젝트에는 업데이트가 필요했지만 spring-boot-starter-test1.5 이상 버전에는 spring-boot-starter-logging. 2.0에는


5

제 경우 spring-boot-starter-logging에는 spring-boot-starter-security하나 에서 유물 을 제외하기 만하면되었습니다 .

이것은 다음 종속성을 포함하여 새로 생성 된 스프링 부트 2.2.6.RELEASE 프로젝트에 있습니다.

  • 스프링 부트 스타터 보안
  • 스프링 부트 스타터 검증
  • 스프링 부트 스타터 웹
  • 스프링 부트 스타터 테스트

나는 실행 mvn dependency:tree하고 찾고 ch.qos.logback.

<dependencies>pom.xml모습과 관련된 스프링 부츠 는 다음과 같습니다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</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-log4j2</artifactId>
    </dependency>

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

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>



</dependencies>

spring-boot-starter-logging을 제외한 후에 작동했습니다
Prateek Mehta

4

이것을 build.gradle에 추가하십시오.

configurations.all {
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    exclude group: 'org.springframework.boot', module: 'logback-classic'
}

2

log4j2를 사용하려고 할 때 SpringBoot에서이 오류가 발생하면 다음 단계를 수행하십시오.

  • 이 "excludeGroupIds log4j-slf4j-impl / excludeGroupIds"를 추가하여 패키징하는 동안 항아리를 제거하십시오.
  • "mvn dependentecy : tree"명령을 사용하여 "logback-classic"에 종속 된 라이브러리를 찾으십시오.
  • 찾을 때마다 종속성에서 제외하십시오.

이 오류는 logback이 log4j2 변경 사항을 대체하기 때문에 발생했습니다. 따라서 log4j2를 사용하려면 로그 백 라이브러리와 종속성을 제거해야합니다.

이것이 누군가를 도울 수 있기를 바랍니다.


2

기본 로깅을 제외하고 로깅을 위해 log4j를 구성하는 올바른 방법입니다.

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

Spring Logging-How To를 참조하십시오 .


1

Netbeans IDE에서 로그 백 제외를 추가하려면

  1. 프로젝트 의> 프로젝트 탐색기 섹션에 액세스합니다.
  2. 아래 표시된대로 > 종속성 으로 이동하십시오.
  3. 'spring-boot-starter-logging-XXXjar'추적
  4. 항아리를 마우스 오른쪽 버튼으로 클릭하고 아래와 같이 종속성 제외를 선택하십시오 . 이것은 다음과 같이 pom.xml의 logback jar를 제외합니다.

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

여기에 이미지 설명 입력


1

내 경우에는 제외가 작동합니다!

    <dependency>
        <groupId>com.xyz.util</groupId>
        <artifactId>xyz-web-util</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

1

제외를 추가하는 것만으로는 충분하지 않았습니다. 가짜 항아리를 제공해야했습니다.

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

1

그 이유는 스프링 부트는 기본 로그 구성으로 logback과 함께 제공되는 반면 camel은 log4j를 사용하기 때문입니다. 그것이 갈등의 이유입니다. 위의 답변에서 언급했듯이 스프링 부트에서 로그 백을 제거하거나 낙타에서 log4j를 제거하는 두 가지 옵션이 있습니다.

<dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>${camel.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

0

클래스 경로에 logback.xml 구성을 추가하고 루트 어 펜더가 추가 된 모든 구성을 추가하십시오. 스프링 부트가 빈 로딩을 완료하면 구성에 따라 로깅을 시작합니다.

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