BE/Spring & Spring Boot

[Spring Boot] @Slf4j

baek-dev 2025. 2. 9. 14:55

Lombok 라이브러리에서 제공하는 어노테이션.

클래스 내부에 SLF4J(Simple Logging Facade for Java) 기반의 로깅 객체를 자동으로 생성해 주는 기능을 함.

즉, @Slf4j를 클래스에 추가하면, log라는 이름의 Logger 객체가 자동으로 생성되며, 이를 통해 로깅을 쉽게 사용할 수 있음.

 

1. @Slf4j 사용법

@Slf4j 적용 및 사용 예제

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LogExample {

    public static void main(String[] args) {
        log.info("Hello, this is an INFO log message!");
        log.debug("Debugging details here.");
        log.warn("Warning message!");
        log.error("Something went wrong!");
    }
}

 

실행 결과 (로그 출력 예제)

[INFO ] 2025-01-29 12:00:00.123 [main] LogExample - Hello, this is an INFO log message!
[DEBUG] 2025-01-29 12:00:00.124 [main] LogExample - Debugging details here.
[WARN ] 2025-01-29 12:00:00.125 [main] LogExample - Warning message!
[ERROR] 2025-01-29 12:00:00.126 [main] LogExample - Something went wrong!

2. @Slf4j의 역할과 장점

2.1. SLF4J란?

  • SLF4J(Simple Logging Facade for Java)는 로그 라이브러리들의 공통 인터페이스 역할을 하는 라이브러리.
  • 직접적으로 로깅을 하지 않고, Logback, Log4j, java.util.logging 등 다양한 로깅 프레임워크와 연결할 수 있음.

 

2.2. Lombok의 @Slf4j가 제공하는 장점

  1. 코드 간결화
    • 기존의 LoggerFactory.getLogger(클래스명.class)를 사용할 필요 없이, 간단하게 @Slf4j를 선언하는 것만으로 log 객체를 자동으로 생성해줌.
  2. SLF4J 기반의 로깅 제공
    • @Slf4j를 사용하면 SLF4J 인터페이스를 사용하여 유연한 로깅이 가능함.
    • 즉, Logback, Log4j2, java.util.logging 등 어떤 로깅 프레임워크를 사용하든 일관된 방식으로 로깅 가능.
  3. Spring Boot에서 기본적으로 지원됨
    • Spring Boot에서는 기본적으로 SLF4J와 Logback을 사용하므로 @Slf4j와 매우 잘 맞음.
    • 추가 설정 없이 바로 사용 가능.

3. @Slf4j vs LoggerFactory 직접 사용

@Slf4j 없이 직접 LoggerFactory를 사용하는 경우:

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

public class LogExample {
    private static final Logger log = LoggerFactory.getLogger(LogExample.class);

    public static void main(String[] args) {
        log.info("Hello, this is an INFO log message!");
    }
}

이렇게 직접 Logger 객체를 선언하는 방식보다 Lombok의 @Slf4j를 사용하면 코드가 훨씬 간결해짐.


4. @Slf4j 사용 시 주의할 점

4.1. Lombok이 설치되지 않은 경우

@Slf4jLombok이 필요하므로, Lombok이 설정되지 않았다면 컴파일 에러가 발생함.

IntelliJ에서 Lombok 플러그인을 설치하고, annotationProcessor 설정을 추가해야 함.

 

4.2. 로그 출력 레벨 설정

 

Spring Boot에서 로그 레벨을 조정하려면 application.properties 또는 application.yml에서 설정 가능.

 

예제 (application.yml)

logging:
  level:
    root: info
    com.example: debug

이렇게 설정하면, com.example 패키지의 로그는 DEBUG 이상부터 출력되지만, 기본적으로는 INFO 레벨만 출력됨.


5. @Slf4j와 다른 Lombok 로깅 어노테이션 비교

Lombok은 @Slf4j 외에도 다양한 로깅 어노테이션을 제공함:

어노테이션 설명
@Slf4j SLF4J(Simple Logging Facade for Java) 사용
@Log4j2 Apache Log4j2 사용
@Log java.util.logging(JUL) 사용
@CommonsLog Apache Commons Logging 사용
@Flogger Google Flogger 사용

 

예제:

import lombok.extern.log4j.Log4j2;

@Log4j2
public class LogExample {
    public static void main(String[] args) {
        log.info("This is a Log4j2 log message.");
    }
}

Spring Boot에서는 기본적으로 SLF4J + Logback 조합을 사용하므로 @Slf4j를 가장 많이 사용함.


6. 요약

  1. @Slf4j는 Lombok이 제공하는 자동 로깅 객체 생성 어노테이션으로, log 객체를 쉽게 사용할 수 있도록 도와줌.
  2. SLF4J 인터페이스를 기반으로 작동하므로, 다양한 로깅 프레임워크(Logback, Log4j2 등)와 연결할 수 있음.
  3. Spring Boot 환경에서 기본적으로 사용되며, 설정 없이 바로 활용 가능함.
  4. @Slf4j를 사용하면 LoggerFactory.getLogger()를 직접 호출할 필요 없이 더 간결한 코드 작성이 가능함.
  5. 로그 레벨은 application.yml 또는 application.properties에서 조정할 수 있음.

 

 

 

 

출처 : ChatGPT

'BE > Spring & Spring Boot' 카테고리의 다른 글

[Spring Boot] REST Docs + Asciidoctor  (0) 2025.02.15
[Spring Boot] JaCoCo (Java Code Coverage)  (1) 2025.02.10
[Spring Boot] QueryDSL  (1) 2025.02.07
[Spring Boot] @Scheduled  (0) 2025.02.05
[Spring Boot] SpringDoc  (0) 2025.01.28