문제 발생
Repository 작성 후 JPA 테스트를 해보려고 간단한 테스트 코드를 짜서 실행해 보니 아래와 같은 오류가 나왔다.
Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.apache.logging.slf4j.Log4jLoggerFactory loaded from file:/pathXXX/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j2-impl/2.21.1/77d14bb4ef6487833652c443dd7d264e26e2e968/log4j-slf4j2-impl-2.21.1.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.apache.logging.slf4j.Log4jLoggerFactory
원인 분석
프로젝트가 이미 Logback에 대한 의존성을 가지고 있는데 slf4j를 추가로 선언하는 라이브러리가 있어서 나타나는 오류인 것 같다.
문제 해결
gradle에서 Logback에서 선언 중인 slf4j12 라이브러리를 제외해 주자.
configurations {
compileOnly {
extendsFrom annotationProcessor
}
configureEach {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
exclude group: 'ch.qos.logback', module: 'logback-classic'
exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
}
- spring-boot-starter-logging
- Spring Boot에서 기본적으로 제공하는 로깅 설정 제외
- logback-classic
- 중복으로 로깅 시스템이 설정될 수 있으므로 제외
- slf4j-log4j12
- 이전 선언되어 있어 충돌이 나므로 제외
gradle을 수정했으니 build를 하고, 다시 테스트해 보니 위 문제가 해결됐다.