개발자의 오르막

SLF4J Warning : Class path contains multiple SLF4J bindings. 본문

Trouble Shouting

SLF4J Warning : Class path contains multiple SLF4J bindings.

계단 2019. 9. 9. 20:43

스프링 부트 프로젝트를 진행하면서 결국 하나의 장벽에 직면했다..  자잘한 에러들은 금방

고치긴 했는데.. 이번 에러는 차근차근 풀어나가고 싶었다.

(뭐.. 아무것도 모르지만 ㅠㅠ)

 

# SLF4J

SLF4J는 facade 디자인 패턴을 사용한 로깅 프레임워크이며, Log4j, LogBack 이 SLF4J 를 구현한 구현체이다.

facade 패턴은 여러개의 클래스가 하나의 역할을 수행할 때, 대표적인 인터페이스만을 다루는 클래스를

두어 원하는 기능을 처리할 수 있게 도와주는 패턴이다.

 

아래와 같은 에러가 나는 이유로. slf4j와 logback 두개 모두 dependency를 추가하면서

SLF4J로 추가했던 dependency에 log4j를 default로 사용하면서 실질적으로 원했던

logback 이 아닌 log4j가 logger로 선택되면서 발생한 문제이다.

아래 메시지를 보면 Actual binding 은 logback 임을 강조하는 문구가 보인다..


SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/C:/Users/ADMIN/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.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. 

SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

 


이런 메시지가 뜨는데. multiple SLF4J bindings 이 핵심인 것 같다.

 

m2/repository의 ch/경로의 slf4j 와 org/ 경로의 slf4j가 충돌이 나는걸까..

 

요상한 건 thymeleaf 의 dependency 가 추가되면서 이 에러가 떴다는 것이다.. 다른 프로젝트에서는 안떴는데. ㅠ

(build 순서의 문제일까 싶어서 요리조리 바꿔봤지만 안됐다.. ㅠ)

 


그럼 에러의 내용대로 둘중 하나의 경로를 한번 삭제해봐야겠다. ㅎㅎ

난 org 코인에 투자하고, org를 밀어봤다ㅎㅎ 두둥..

일단 난리가 났는데.. ㅋㅋㅋㅋㅋㅋㅋㅋㅋ  maven update 를 함 해봐야겠다.

휴.. 일단 성공..

그렇지만.. 여전히 같은 에러가 뜬다.. 어떻게 같은 에러가 뜨는거지?? / 폴더를 삭제했는데!!

빌드업을 시켜보니.. ch 폴더던 org 폴더던 다시 생김을 알 수 있었다!! ㅠㅠ

 

그렇다면 방법은 dependency 부분을 수정하는 것 뿐!

 


https://www.slf4j.org/codes.html#multiple_bindings

 

SLF4J Error Codes

SLF4J warning or error messages and their meanings No SLF4J providers were found. This warning, i.e. not an error, message is reported when no SLF4J providers could be found on the class path. Placing one (and only one) of slf4j-nop.jar slf4j-simple.jar, s

www.slf4j.org

구글링을 해보니.. 역시 좋은 싸이트를 금방 찾을 수 있었다.

읽어보니.. multibinding 됐으니 둘 중 하나를 exclude를 하면 된다는 얘기인 것 같았다.

버전은 다르니까.. exclusion 부분만 가져와서 붙여봤다ㅎㅎ

 

exclusion 붙이거나, slf4j 의 dependency를 삭제하거나!!

 

 

Comments