반응형
[장애 사례] SLF4J AbstractMethodError 발생 원인과 해결 방법
Spring 기반 WAR를 JBoss/WildFly에 배포할 때 다음과 같은 에러로 배포 실패하는 경우가 있습니다.
✅ 에러 메시지 요약
Caused by: java.lang.AbstractMethodError:
org.slf4j.impl.JDK14LoggerAdapter.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
✅ 원인 정리
- SLF4J API의
log()
메서드는 버전에 따라 시그니처가 달라질 수 있음 slf4j-api
와slf4j-impl
(예:slf4j-jdk14
) 간 버전 불일치 발생 시- 혹은 WildFly에 내장된 SLF4J 모듈과 프로젝트 내부 라이브러리가 충돌할 때 발생
즉, SLF4J 인터페이스는 최신인데 구현체는 구버전이라 메서드를 찾을 수 없음
✅ 재현 환경 예시
- 프로젝트 내 의존성:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.6.1</version> <!-- ← 이 부분이 문제 -->
</dependency>
- 배포 서버: WildFly 26.x
- 에러 발생 시점:
webapp.war
배포 중
✅ 해결 방법
1. slf4j-api와 구현체 버전 통일
slf4j-api
와slf4j-jdk14
또는slf4j-log4j12
등 같은 버전으로 맞추기
예:
<version>1.7.36</version>
2. 의존성 충돌 제거 (Maven/Gradle)
mvn dependency:tree | grep slf4j
- 중복된 구버전 제거
- 종속 라이브러리에서 transitive 의존성이 끌려오지 않도록
exclusions
설정
3. JBoss/WildFly 내장 SLF4J 제외
jboss-deployment-structure.xml 설정 추가:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.slf4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
내부 모듈 제외하고 WAR 내부 라이브러리 우선 적용
✅ 추가 팁
- SLF4J는 facade(인터페이스) 구조이므로 구현체(logback, log4j 등) 명확히 구분해야 함
- WildFly는 기본적으로
org.slf4j
모듈을 내장하고 있으므로 WAR 내부 버전과 충돌 주의
✅ 마무리
이 오류는 라이브러리 충돌의 전형적인 사례입니다.
버전 불일치만 잘 관리해도 대부분 예방할 수 있습니다.
반응형
'Application Servers & Java' 카테고리의 다른 글
[장애 사례] WebLogic STUCK THREAD 경고와 처리 방법 (0) | 2025.05.15 |
---|---|
[장애 사례] SLF4J: Class path contains multiple SLF4J bindings 오류 (0) | 2025.05.15 |
[장애 사례] javax.net.ssl.SSLHandshakeException: PKIX path building failed (0) | 2025.05.15 |
[실무 정리] 커넥션 풀(Connection Pool) 튜닝 가이드 (0) | 2025.05.15 |
[장애 사례 모음] DB 커넥션 오류와 커넥션 풀 이슈 정리 (0) | 2025.05.15 |