반응형
[장애 사례] SLF4J: Class path contains multiple SLF4J bindings 오류
애플리케이션을 WAS에 배포한 후 다음과 같은 SLF4J 관련 로그가 출력된다면?
✅ 에러 메시지 요약
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [logback-classic-1.1.2.jar]
SLF4J: Found binding in [slf4j-log4j12-1.6.2.jar]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings
✅ 원인
- SLF4J는 로깅 인터페이스(facade)이며, 실제 로그 출력은 별도의 구현체가 담당합니다
slf4j-api
는 하나지만, 구현체인 다음 두 개가 동시에 클래스패스에 포함된 상태입니다:
충돌된 구현체 | 설명 |
---|---|
logback-classic-1.1.2.jar |
Logback 기반 로깅 |
slf4j-log4j12-1.6.2.jar |
Log4j 기반 로깅 연동 |
→ SLF4J는 오직 하나의 구현체만 존재해야 함
✅ 실제 경로 예시
vfs:/app/webapp/WEB-INF/lib/logback-classic-1.1.2.jar
vfs:/app/webapp/WEB-INF/lib/slf4j-log4j12-1.6.2.jar
✅ 해결 방법
✔ 1. 구현체 하나만 선택
Logback을 사용할 경우:
✅ 유지:
logback-classic
,logback-core
,slf4j-api
❌ 제거:slf4j-log4j12
,log4j.jar
Log4j를 사용할 경우:
✅ 유지:
slf4j-log4j12
,log4j.jar
,slf4j-api
❌ 제거:logback-classic
,logback-core
✔ 2. 의존성 관리 (Maven 예시)
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
→ 다른 라이브러리에서 slf4j-log4j12
가 포함될 경우 exclusions
로 제거
✔ 3. Gradle 예시
configurations.all {
exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
✅ SLF4J 로딩 우선순위 팁
- SLF4J는 클래스패스에 존재하는 첫 번째 구현체를 로딩
- 하지만 여러 개가 존재하면 경고 로그만 출력되고, 동작은 예측 불가 (순서 의존성 발생)
✅ 마무리
SLF4J 환경에서 multiple bindings
경고는 다음 3가지로 해결할 수 있습니다:
- 구현체는 반드시 하나만 포함할 것
- 빌드 도구에서 의존성 충돌 제거
- WAS 배포 전
WEB-INF/lib/
내 중복 jar 점검
반응형
'Application Servers & Java' 카테고리의 다른 글
[장애 사례] Infinispan CacheException - StateTransferManager wait 오류 (0) | 2025.05.15 |
---|---|
[장애 사례] WebLogic STUCK THREAD 경고와 처리 방법 (0) | 2025.05.15 |
[장애 사례] SLF4J AbstractMethodError 발생 원인과 해결 방법 (0) | 2025.05.15 |
[장애 사례] javax.net.ssl.SSLHandshakeException: PKIX path building failed (0) | 2025.05.15 |
[실무 정리] 커넥션 풀(Connection Pool) 튜닝 가이드 (0) | 2025.05.15 |