공식 페이지에서 아래와 같이 slf4j 를 정의하고 있다.
The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.
|
Simple Logging Facade for Java 의 약자로 logging framework 들을 추상화 해 놓은 것이다. Facade Pattern 을 적용한 logging framework 이다.
Facade Pattern 이란? 통합된 인터페이스를 제공할 수 있는 패턴으로 상세한 내용은 wiki 페이지를 참고하면 된다.
|
slf4j 는 추상 로깅 프레임워크이기 때문에 단독으로는 로깅을 하지 않는다.(그림참조)
보통은 log4j 나 logback 을 함께 사용한다.
slf4j 의 특징으로는 아래와 같다.
- 개발시점에 logging framework 을 선택할 수 있다.
- jvm 에 의해 유효성 체크가 되며, 바인딩 된 logging framework 이 없다면 아무런 동작을 하지 않는다.
- log4j 나 logback 같은 logging framework 을 지원한다.
- 기존 legacy logging api 를 지원하며, slf4j 로 migration 도 지원한다.
- 인자형 로그 메시지를 지원한다.
ex) LOGGER.debug(“hello {}”, “world”);
사용법(slf4j + logback)
<dependencies>
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.10</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.0.13</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> |
import org.junit.Test;
import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Created by NAVER on 2016. 1. 8.. */ public class LoggingTest { private static final Logger LOGGER = LoggerFactory.getLogger(LoggingTest.class); /** * 인자형 로그 메시지 */ @Test public void parameterizedLoggingMessage() { String message = "world!"; LOGGER.debug("Hello {}", message); } /** * LOGGER.isDebugable() */ @Test public void logLevel() { String message = "LogLevel is {}"; LOGGER.debug(message, "debug"); LOGGER.info(message, "info"); LOGGER.warn(message, "warn"); } }
|
이 외에도 실무에 사용하기에 편한 특징들이 더 많이 있다.
개인적으로 제일 편했던 기능은 Logback 설정시 조건문을 사용할 수 있다는 것과 동적으로 JMX 를 이용하여 log level 을 변경할 수 있다는 것이다.
(log level 변경은 운영에서 사용하는 것은 권장하지 않는다.)
참고자료
'Programing > Java' 카테고리의 다른 글
[자바8 람다의 힘] 4장 람다 표현식을 이용한 설계 (0) | 2016.02.10 |
---|---|
Java Static 과 Spring Singleton 의 차이 (0) | 2016.01.20 |
PowerMockito 를 이용하여 private method Mock 처리하기 (0) | 2015.12.31 |
javax.net.ssl.SSLProtocolException 해결책 (0) | 2015.12.31 |
java.io.InvalidClassException (0) | 2015.07.15 |