Post

log4j-slf4j-impl cannot be present with log4j-to-slf4j 에러

1. 에러 메시지

1
Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j

2. 해결방법

1) Maven

스프링 부트는 클래스 경로에 있는 경우 로깅 구성을 위해 Log4j2를 지원한다. 종속 항목을 조립하기 위해 starter를 사용하는 경우 Logback을 제외하고 log4j2를 포함해야 한다.

spring-jcl starter를 사용하지 않는 경우 Log4j2에 추가로 제공해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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-log4j2</artifactId>
</dependency>

2) Gradle

Gradle은 스타터를 설정하는 몇 가지 다른 방법을 제공한다. 한 가지 방법은 모듈 교체를 사용하는 것이다. 이렇게 하려면 Log4j2 스타터에 대한 종속성을 선언하고 기본 로깅 스타터의 모든 발생을 Log4j2 스타터로 대체해야 한다고 Gradle에 알린다.

1
2
3
4
5
6
7
8
9
10
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}

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

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.