그렇다면, 구현체 라이브러리인 logback(logback-classic, logback-core),log4j(log4j, log4j-core)와 함께 사용하는 법을 알아보자.
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라이브러리 두 개 모두 포함되어있다.
-> 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
*/
아래 에러 발생
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

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

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