Eclipse에서 SLF4J 라이브러리 사용해서 로깅하기

신수연·2025년 8월 6일

#SLF4J란?

  • slf4j는 코드 변경없이 구현체 라이브러리를 바꿀 수 있는 라이브러리
  • 프로젝트에 포함된 라이브러리에 따라 구현체가 달라짐.

그렇다면, 구현체 라이브러리인 logback(logback-classic, logback-core),log4j(log4j, log4j-core)와 함께 사용하는 법을 알아보자.

1. SLF4JTest.java

SLF4J를 사용한 로깅하는 클래스를 만들자.
해당 파일의 코드 변경없이 구현체의 라이브러리를 바꿀 수 있기 때문에 이 코드는 이제 수정하지 않아도 된다.

package dev.step03_slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JTest {
	private static Logger Log = LoggerFactory.getLogger("SLF4JTest");

	public static void main(String[] args) {
		Log.info("INFO 메시지");
		System.out.println("Logger class: " + Log.getClass().getName());
	}

}

현재 프로젝트에는 log4j와 logback라이브러리 두 개 모두 포함되어있다.

2. 어떤 구현체 라이브러리가 쓰이고 있는 지 콘솔로 확인

-> logback 라이브러리가 쓰이고 있음

package dev.step03_slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JTest {
	private static Logger Log = LoggerFactory.getLogger("SLF4JTest");

	public static void main(String[] args) {
		Log.info("INFO 메시지");
		System.out.println("Logger class: " + Log.getClass().getName());
	}

}

/** 응답
* 10:36:51.791 [main] INFO SLF4JTest - INFO 메시지
* Logger class: ch.qos.logback.classic.Logger
*/

3. logback말고 log4j를 쓰고싶으면? classpath에서 logback라이브러리 지우기

아래 에러 발생

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
Logger class: org.slf4j.helpers.NOPLogger

3-1. log4j 인식 못함 -> slf4j랑 연결할 수 있도록 브릿지 라이브러리 log4j-slf4j2-impl 추가해줘야함.


브릿지 추가후, Log4JLogger클래스로 동작하는 것 확인

Log.info가 안떠서 classPath에 다시 설정해줬더니 됨!!

결론

  • SLF4J를 사용하면 코드변경없이 구현체 라이브러리만 바꿔서 사용할 수 있다.
  • 구현체 라이브러리 중 log4j라이브러리를 사용하려면 SLF4J와 연결해줄 수 있는 브릿지 라이브러리 log4j-slf4j2-impl 를 설치해줘야한다.

0개의 댓글