-
[Spring Logging] Slf4j - log4j2 사용 시 기존 logback, log4j 와 충돌 에러Spring 2021. 11. 29. 14:36
문제상황:
-slf4j의 구현체로 log4j를 사용하다가 최신에 아파치에서 나온 멀티 스레드 환경에서 제일 성능이 좋은 log4j2를 사용하려고 하였다.
-log4j2를 사용하기 위해 gradle.build에 다음과 같은 dependency를 추가 하였다.
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
그랬더니 프로젝트 내에 다른 구현체 (log4j와 logback)이 충돌이 발생했다.
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/Min/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j-impl/2.14.1/9a40554b8dab7ac9606089c87ae8a5ba914ec932/log4j-slf4j-impl-2.14.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/Min/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.4/f3bc99fd0b226065012b24fe9f808299048bab54/logback-classic-1.2.4.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 [org.apache.logging.slf4j.Log4jLoggerFactory]
시도:
처음에는 충돌이 나는 모듈을 gradle.build에서 exclude 다음과 같이 exclude 시켜 주었다.
configurations { compile.exclude module: 'spring-boot-starter-logging' compile.exclude module: 'org.apache.logging' compile.exclude modeul: 'org.apache.logging.log4j' compile.exclude module: 'ch.qos.logback' }
그래도 동일한 에러가 계속 발생하였다.
해결:
다음과 같은 방법으로 스프링부트 그룹안에 spring-boot-starter-logging 모듈을 exclude 시켜주니 더이상 에러가 발생하지 않고 잘 작동하였다.
configurations { all { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' } }
그래도 잘 작동하지 않는다면 gradle depency 캐시가 있는 경로에서 log4j, logback 관련 폴더를 삭제해 주고 다시 빌드하면 된다.
~/.gradle/caches/modules-2/files-2.1 경로에서 'ch.qos.logback', 'org.apache.logging', 'org.apache.logging.log4j' 이렇게 3개의 폴더를 삭제해주면 된다.
'Spring' 카테고리의 다른 글