[Issues]Failed to instantiate SLF4J LoggerFactory Error

flexin·2022년 3월 28일
0

Issues

목록 보기
4/4
post-thumbnail

📌 원인

Log4j 1.x -> 2.17.2 업데이트 도중
java.lang.NoClassDefFoundError: org/apache/log4j/Level 에러 발생

이전 log4j 업데이트 관련 글을 보면 log4j api/core 두 가지 라이브러리 수정 후 정상 로그 출력을 확인할 수 있었다.

현재 업데이트 하는 프로그램은 slf4j api를 사용중이며
log4j api/core 2.17.2로 업데이트 시 log4j/Level 클래스를 찾을 수 없다고 나온다.

로그를 찍는 부분은 실질적으로 log4j api/core 라이브러리지만,
현재 프로젝트의 FTP 관련 라이브러리에서 org.apache.ftpserver.usermanager.PropertiesUserManagerFactory를 참조한다.

오류가 나는 이유는 업데이트한 2.17.2 Log4j에서는 PropertiesUserManagerFactory에서 호출되는 slf4j를 가지고 있지 않기 때문이다.
(Log4j 1.x 버전은 가지고 있었기에 업데이트 전에는 오류가 나지 않았다.)

그래서 지금 해야할 것은 slf4j 관련된 클래스를 참조시켜야한다.


📌 개발환경

  • Windows 10 Pro
  • Eclipse Mars 2.0 (x32)
  • Java 8
  • Library
    • Log4j v1.2 / v2.17
    • org.apache.ftpserver.usermanager

📌 해결방안

📃 라이브러리 확인

현재 프로젝트에서 log4j, slf4j 관련 라이브러리는 총 3개다.

  • log4j
    • log4j-1.2.17
  • slf4j
    • slf4j-api-1.7.36
    • slf4j-log4j12-1.7.21

일단 2.17.2 버전으로 업데이트를 한 후 실행해보자.
아래와 같은 에러가 나온다.

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.impl의 StaticLoggerBinder 클래스를 로드하지 못한다고 한다.
log4j core, api 2.17 버전에서는 slf4j의 해당 클래스를 가지지 않고 있다.

위 두 라이브러리를 받을 때 같이 들어있었던
log4j-slf4j-impl-2.17.2 라이브러리에서 slf4j 관련 클래스를 가지고 있다.

*Log4j 2.17.2 Download
https://logging.apache.org/log4j/2.x/download.html

log4j-slf4j-impl-2.17.2 라이브러리를 추가한 후 실행해보면 정상적으로 작동된다.

결론은
1.x버전의 경우 slf4j 관련 클래스들이 포함되어 있었지만,
2.x버전의 경우 api, core, "slf4j-impl"까지 따로 참조해야한다.

profile
Developer

0개의 댓글