@Slf4j 어노테이션

Kkd·2025년 1월 22일
0

매일메일 개념정리

목록 보기
70/93

@Slf4j란?

@Slf4jLombok 라이브러리가 제공하는 어노테이션 중 하나로, 클래스에 SLF4J(Simple Logging Facade for Java) 로거(org.slf4j.Logger)를 자동 생성해주는 역할을 합니다. 개발자가 직접 로거 인스턴스를 선언하지 않아도, log라는 이름으로 Logger 인스턴스를 사용할 수 있게 만들어줍니다.


1. Lombok의 @Slf4j 사용 예시

아래와 같이 Lombok을 의존성으로 추가하고, 클래스 위에 @Slf4j 어노테이션을 적용하면 됩니다.

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ExampleService {
    
    public void doSomething() {
        log.info("Something happened!");
    }
}

동작 원리

  • Lombok이 컴파일 시점(Annotation Processing)을 통해 log라는 이름의 private static final Logger log 필드를 자동으로 추가합니다.
  • 해당 로거는 LoggerFactory.getLogger(ExampleService.class)와 동일하게 동작.

2. SLF4J와 Lombok의 관계

  • SLF4J(Simple Logging Facade for Java):
    자바에서 다양한 로깅 프레임워크(Logback, Log4j, JUL 등)에 대한 추상화 계층을 제공.
    코드는 SLF4J를 통해 로그를 생성하고, 실제 출력은 Logback이나 Log4j2가 담당.

  • Lombok@Slf4j, @Log4j, @Log 등 다양한 로깅 어노테이션을 제공해, 해당 로거 인스턴스를 자동 생성합니다.

주로 사용되는 로깅 어노테이션 (Lombok)

  • @Slf4j: SLF4J 기반 로거 생성
  • @Log4j2: Log4j2 기반 로거 생성
  • @CommonsLog: Apache Commons Logging 기반 로거 생성 등

3. @Slf4j 사용 시 장점

  1. 보일러플레이트 코드 감소

    • 로거 필드를 직접 선언하고 초기화하는 코드를 생략해도 됨.
    • 예:
      private static final Logger log = LoggerFactory.getLogger(ExampleService.class);
      위와 같은 코드가 자동 생성됨.
  2. 일관성 있는 로깅

    • 모든 클래스에서 동일한 방식(@Slf4j)을 사용해 로깅 인프라를 설정.
  3. 유지보수 편의

    • Lombok 애노테이션 하나로 로거 설정을 쉽게 변경 가능(다른 로깅 애노테이션으로 교체).

4. @Slf4j 사용 방법

4.1 Lombok 의존성 추가

  • Maven 예시:
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.24</version>
        <scope>provided</scope>
    </dependency>
  • Gradle 예시:
    compileOnly 'org.projectlombok:lombok:1.18.24'
    annotationProcessor 'org.projectlombok:lombok:1.18.24'

4.2 @Slf4j 어노테이션 적용

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class UserService {

    public void createUser(String name) {
        log.info("Create user with name: {}", name);
    }
}
  • 코드 컴파일 시 Lombok이 아래와 같이 로거 필드를 자동 추가:
    private static final org.slf4j.Logger log =
        org.slf4j.LoggerFactory.getLogger(UserService.class);

4.3 로그 레벨 설정

  • SLF4J를 사용할 때 Logback(기본)이나 Log4j2 설정 파일을 통해 로그 레벨을 조정.

예) logback-spring.xml:

<configuration>
    <logger name="com.example" level="DEBUG" />
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

5. @Slf4j 사용 시 주의 사항

  1. 프로덕션 빌드에서 Lombok 필요

    • Lombok은 컴파일 시점에 코드 생성, 프로덕션 환경에서도 Lombok 없이 동작하긴 하지만, 로컬 빌드 시에는 Lombok 설치·설정이 중요.
  2. 로그 레벨 적절히

    • 디버그용 로그(log.debug)는 프로덕션 환경에서 너무 많으면 성능 저하 가능.
    • 민감 정보(비밀번호, 개인 정보 등)는 로그로 남기지 않도록 주의.
  3. 단일 책임

    • 로깅 로직 자체는 분리해서 작성하지 않아도 되지만, 클래스 책임이 복잡하면 로그 내용도 복잡해짐.

정리

@Slf4j는 Lombok이 제공하는 어노테이션으로, SLF4J 로거를 자동 생성하여 손쉽게 로깅 코드를 작성하도록 돕습니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다:

  • 보일러플레이트 제거: 로거 필드 선언 코드를 생략.
  • 일관성 있는 로깅 스타일: SLF4J 인터페이스를 사용하는 표준화된 로깅.
  • 로깅 프레임워크 변경 용이: SLF4J 추상화 덕분에 Logback, Log4j 등 교체 시에도 코드 변경 최소화.

애플리케이션에서 로깅을 쉽게 설정하고 일관성 있는 형식의 로그를 남기려면 @Slf4j를 적극 활용하는 것이 좋습니다.


추가 학습 자료

profile
🌱

0개의 댓글