Java/일반

SLF4J

창욱씨 2020. 4. 3. 17:30

1. SLF4J란

 SLF4J(Simple Logging Façade For Java)란 Logging Framework들을 추상화해 놓은 것입니다. Facade Pattern을 이용한 Logging Framework입니다. SLF4J는 추상 Logging Framework이기 때문에 단독으로는 로깅을 할 수 없습니다. 보통은 Log4J나 Logback 프레임워크를 함께 사용합니다.

SLF4J의 특징

  • JVM에 의해 유효성 체크가 되며, 바인딩 Logging Framework가 없다면 아무런 동작을 할 수 없습니다.
  • Log4J나 Logback과 같은 Logging Framework를 지원합니다.
  • 기존 Legacy Logging Api를 지원하며, SLF4J로 Migration도 지원합니다.
  • 인자형 로그 메시지를 지원합니다. (ex: Logger.debug(“hello {}”, “world”))
  • Logback 설정 시 조건문을 사용할 수 있습니다.
  • JMX를 이용하여 Log Level을 변경할 수 있습니다.
  • SLF4J는 세 가지 모듈을 제공합니다. (SLF4J-api, SLFJ4-binding, SLF4J-Bridging)

2. SLF4J API

 SLF4J API는 Logging에 대한 추상 레이어를 제공하는 모듈입니다. 사용자는 이 Interface를 이용해 Logging 코드를 작성합니다.

예제

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {   
    public static void main(String[] args) {      
        Logger logger = LoggerFactory.getLogger(HelloWorld.class);  
        logger.info("Hello World");   
    }
}

3. SLF4J Binding

 SLF4J Binding은 SLF4J Interface를 로깅 구현체(Logging Framework)와 연결하는 어댑터 역할을 하는 라이브러리입니다. 각각의 SLF4J Binding은 compile time에 오직 하나의 Logging Framework를 사용하도록 바인딩 합니다. 만약, Classpath에서 바인딩된 구현체가 발견되지 않으면 기본적으로 no-operation으로 설정된다. 즉, 출력되는 것이 없다는 말입니다. 그렇기 때문에 사용자는 반드시 사용하길 원하는 Logging Framework에 대한 SLF4J바인딩을 추가해야 합니다.

4. SLF4J Bridging

 SLF4J이외의 다른 Logging API로의 Logger 호출을 SLFJ4 Interface로 연결하여 SLF4J API가 대신 처리할 수 있도록 하는 일종의 어댑터 역할을 하는 라이브러리입니다. 프로젝트는 다양한 components로 구성됩니다. 그 중 일부는 SLF4J 이외의 Logging API에 의존할 수도 있는데 여러 API를 관리하기 보다는 Single Channel을 이용해 Logging을 통합하는 것이 바람직하고 편리합니다. 이를 위해 제공되는 모듈이 SLF4J Bridging입니다.

SLF4J Bridging 사용시 주의사항

 동종 브릿지를 사용한다면 아래와 같은 문제를 가집니다. 그래서 브릿지랑 바인딩이 동종 브릿지를 사용하지 않도록 주의해야 합니다.

참조: https://tomining.tistory.com/102
참조: https://gmlwjd9405.github.io/2019/01/04/logging-with-slf4j.html

728x90