OpenSource

Tomcat 8에서 slf4j multiple binding 이슈 (logback 설정 안되는 문제)

아르비스 2017. 1. 26. 13:57

Tomcat 7 + SLF4j  (logback) 을 이용하여 로그를 남기고 있었다.


그러다 tomcat 8로 업그레이드 하면서,

갑자기 일부 WAS 모듈에서 log가 남지 않는 현상 발생함.


원인을 파악해보니..


다름과 같은 내용인 catalina.cout에 생성됨 (JAVA -verbose:class 옵션 추가)


SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/block/ccpkg/app/cc_drive/webapps/fsw/WEB-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/block/ccpkg/app/cc_drive/webapps/fsw/WEB-INF/lib/logback-classic-1.1.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.



원인은 logback의 jar 인 logback-classic이 로딩이 뒤에 되면서, log4j로 동작하게 됨.

logback.xml만 존재하여, default  log4j로 동작하여 문제 발생.



[해결방법]

인터넷으로 여러군데 다 확인해 보았으나..

마땅한 방법이 없었음.


그래서..


해당  was pom 에서 slf4j-log4j12 의 dependency를 찾아보니.. zookeeper 였음

그래서 해당 library를 excluding 해줌..

<dependency>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>3.4.6</version>

<exclusions>

<exclusion>

                        <groupId>org.slf4j</groupId>

                        <artifactId>slf4j-log4j12</artifactId>

                </exclusion>

</exclusions>

</dependency>

....



재 빌드 후 결과

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/block/ccpkg/app/cc_stream/webapps/snw/WEB-INF/lib/logback-classic-1.1.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/block/ccpkg/app/cc_stream/webapps/snw/WEB-INF/lib/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.



logback jar가 먼저 로딩되는 것 확인!!

그리고 해당 log 가 정상적으로 나오는 것 확인됨.


아 어렵다.