카테고리:

3 분 소요

SLF4J

SLF4J는 “Simple Logging Facade for Java”의 약자로, 자바 애플리케이션에서 사용되는 로깅 인터페이스이다. SLF4J는 로깅 시스템에 대한 추상화 계층을 제공하여 애플리케이션 코드가 특정 로깅 프레임워크에 종속되지 않도록 하며, 애플리케이션 코드에서 로깅을 위한 API를 호출할 때 어떤 구현체를 사용할지 결정할 수 있다.

문제 상황

HikariCP를 프로젝트에서 사용하기 위해 Maven을 통해 라이브러리를 추가하자 발생한 오류로 아래와 같이 출력되었다.

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

오류 메시지에서 안내하는 페이지로 이동하니 다음과 같이 설명하고 있었다.

이 경고 메시지는 slf4j-api 버전 1.7.x 이하에서 org.slf4j.impl.StaticLoggerBinder 클래스를 메모리에 로드할 수 없을 때 보고됩니다. 이 문제는 클래스 경로에서 적절한 SLF4J 바인딩을 찾을 수 없을 때 발생합니다.

이 메시지가 표시되는 경우 slf4j-api 버전 2.0 이상이 아니라 slf4j-api 버전 1.7.x 이하를 사용하고 있는 것입니다. Slf4j-api 버전 2.0.x 이상은 ServiceLoader 메커니즘을 사용합니다.

해결 방안

클래스 경로에 slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar 또는 logback-classic.jar 중 하나를 배치하면 문제가 해결된다. 따라서, Maven으로 위의 목록 중 하나를 설치하면 해당 오류는 사라진다.

  • slf4j-nop-x.x.jar : 로깅 메시지를 아무데도 남기지 않는다.
  • slf4j-simple-x.x.jar : INFO, DEBUG, TRACE 메시지는 표시하고 나머지는 모두 System.err로 출력한다.
  • slf4j-log4j12-x.x.jar : Log4J frame work. 이것을 사용하려면 추가로 log4j.jar이 있어야 한다.
  • slf4j-jdk14-x.x.jar : Java.util.logging framework

주의 할 점

다만, 주의 할 점도 아래와 같이 언급하고 있다.

애플리케이션 패키징을 담당하고 로깅에 신경 쓰지 않는 경우 애플리케이션의 클래스 경로에 slf4j-nop.jar를 배치하면 이 경고 메시지를 제거할 수 있습니다.
라이브러리나 프레임워크와 같은 임베디드 컴포넌트는 SLF4J 바인딩(또는 공급자)에 대한 종속성을 선언해서는 안 되고 slf4j-api에만 종속성을 선언해야 한다는 점에 유의해야 합니다.
라이브러리가 SLF4J 바인딩(또는 공급자)에 대한 컴파일 타임 종속성을 선언하면 최종 사용자에게 해당 바인딩(또는 공급자)을 부과하여 SLF4J의 목적을 무효화합니다.

참고

https://www.slf4j.org/codes.html#StaticLoggerBinder
https://jinsiri.tistory.com/593
https://blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=beanpole2020&logNo=221485607117

태그: Failed to load class, hikaricp, java, maven, org.slf4j.impl.StaticLoggerBinder, slf4j, slf4j-api, slf4j-nop.jar, 종속성

업데이트: