SLF4J에 대해 정리하기 전에 Log4j, Logback, Log4j2를 간단하게 정리해 보자.
Log4j, Logback, Log4j2는 로깅 프레임워크라 한다.
SLF4J(Simple Logging Facade for Java)는 java.util.logging, logback 및 log4j2와 같은 다양한 로깅 프레임워크에 대한 인터페이스 역할을 하는 라이브러리다.
중요한 키워드는 Facade와 Interface 두 개다.
Facade Pattern이란 복잡한 시스템이나 서브시스템의 인터페이스에 대한 간략한 인터페이스를 제공하여, 시스템의 복잡성을 감소시키는 패턴을 뜻한다.
자세한 내용은 아래 포스팅을 참고하기 바란다.
굳이 SLF4J라는 라이브러리를 사용하는 이유는 무엇일까?
log4j를 사용 중이었는데 logback으로 변경해야 하는 경우가 생기면 log4j를 사용한 전체 코드를 수정해야 할 것이다. SLF4J를 사용하면 전체 코드를 수정하지 않고 로깅 프레임워크만 변경해 주면 된다.
우리는 lombok의 @Slf4j 어노테이션을 추가하여 사용하고 있을 것이다.
SpringBoot는 기본 log로 logback을 사용하고 있어 spring-boot-starter-web안에 spring-boot-starter-logging라이브러리가 logback관련 라이브러리를 포함하고 있어 별다른 dependency추가 없이 사용할 수 있다.
spring-boot-starter-logging라이브러리에 logback-classic, logback-core, slf4j-api, log4j-to-slf4j, jul-to-slf4j 파일이 포함된 것을 확인할 수 있다. 아래 SLF4J의 동작과정을 정리하면서 해당 라이브러리들이 어떤 기능을 하는지 확인해 보자.
Bridge | Bingding | |
jcl-over-slf4j.jar | slf4j-jcl-{version}.jar | 무한루프 |
log4j-over-slf4j.jar | slf4j-log4j12-{version}.jar | 무한루프 |
jul-to-slf4j.jar | slf4j-jdk14-{version}.jar | 무한루프 |
흔히 무의식 중에 로그를 잘못 사용하는 경우가 있다. 그것에 대해 간단히 알아보자.
로그를 출력할 때 + 연산을 사용하지 않는다.
log.debug("data : " + data); // 올바르지 않은 사용법
로그 출력 레벨을 info로 설정하여 출력되지 않더라고 + 연산은 수행된다. 의도치 않게 불필요한 연산 작업을 수행시키는 꼴이다.
log.debug("data : {}", data); // 올바른 사용법
의미 없는 연산이 발생하지 않는다. 더 효율적으로 리소스를 사용할 수 있다.
log.info("Logger : {}", log.getClass());
//Logback
//Logger : ch.qos.logback.classic.Logger
//Log4j
//Logger : org.apache.logging.slf4j.Log4jLogger
log4jdbc 개념정리 (1) | 2024.11.13 |
---|---|
[Spring] Dispatcher Servlet 파헤치기 (Argument Resolver, ReturnValue Handler, Controller 실행시점) (39) | 2024.06.30 |
[Spring] Return Value Handler 개념 / Custom Return Value Handler 생성 (1) | 2024.06.17 |
[Spring] Argument Resolver 개념 / Custom Argument Resolver 생성 (33) | 2024.06.17 |
@Transactional 기초 및 주의사항 (8) | 2023.05.06 |
댓글 영역