intellij에서 log를 설정한 뒤 test 실행 혹은 application run 중에 경고 같은 에러 발생.
환경
windows,
intellij 2022,
kotlin spring,
log4j2
pom.xml
내 pom 파일 일부.
gradle로 해도 같은 에러가 났다면 동일하게 해결할 수 있을 것 같다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>2.7.2</version>
</dependency>
에러 메세지
mvn으로 package를 하려고 하다가 발생했다.
나는 multi-module로 core 모듈과, was 모듈을 가지고 있는데, project 상위 pom으로 build를 시도했다가 에러를 받았다.
project packaging 중 core 모듈 packaing에서 에러가 발생한 것.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/soup/.m2/repository/ch/qos/logback/logback-classic/1.2.11/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/soup/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.17.2/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
해결
에러 메세지 그대로, slf4j에 binding된 dependency가 하나가 아니어서 발생한 에러다.
해결을 위해서는 추가된 slf4j가 의도된 dependency만 추가되도록, 그렇지 않은건 제거해줄 필요가 있다.
maven dependency를 확인해보자.
내 maven dependency
보다시피 내가 추가한 org.springframework.boot:spring-boot-starter-log4j2:2.7.2 외에도,
org.springframework.boot:spring-boot-starter:2.7.0 이 가지고 있는 logging이 있다.
여기서 에러가 발생한 것.
spring-boot-starter-web에서는 exclude를 해줬는데, spring-boot-starter에서는 누락한 것을 추가해준다.
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>2.7.2</version>
</dependency>
reference
- https://www.baeldung.com/slf4j-classpath-multiple-bindings