@Slf4j
는 Lombok 라이브러리가 제공하는 어노테이션 중 하나로, 클래스에 SLF4J(Simple Logging Facade for Java) 로거(org.slf4j.Logger
)를 자동 생성해주는 역할을 합니다. 개발자가 직접 로거 인스턴스를 선언하지 않아도, log
라는 이름으로 Logger 인스턴스를 사용할 수 있게 만들어줍니다.
아래와 같이 Lombok을 의존성으로 추가하고, 클래스 위에 @Slf4j
어노테이션을 적용하면 됩니다.
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ExampleService {
public void doSomething() {
log.info("Something happened!");
}
}
log
라는 이름의 private static final Logger log
필드를 자동으로 추가합니다.LoggerFactory.getLogger(ExampleService.class)
와 동일하게 동작.SLF4J(Simple Logging Facade for Java):
자바에서 다양한 로깅 프레임워크(Logback, Log4j, JUL 등)에 대한 추상화 계층을 제공.
코드는 SLF4J를 통해 로그를 생성하고, 실제 출력은 Logback이나 Log4j2가 담당.
Lombok은 @Slf4j
, @Log4j
, @Log
등 다양한 로깅 어노테이션을 제공해, 해당 로거 인스턴스를 자동 생성합니다.
@Slf4j
: SLF4J 기반 로거 생성@Log4j2
: Log4j2 기반 로거 생성@CommonsLog
: Apache Commons Logging 기반 로거 생성 등보일러플레이트 코드 감소
private static final Logger log = LoggerFactory.getLogger(ExampleService.class);
위와 같은 코드가 자동 생성됨.일관성 있는 로깅
유지보수 편의
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
compileOnly 'org.projectlombok:lombok:1.18.24'
annotationProcessor 'org.projectlombok:lombok:1.18.24'
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);
}
}
private static final org.slf4j.Logger log =
org.slf4j.LoggerFactory.getLogger(UserService.class);
예) logback-spring.xml
:
<configuration>
<logger name="com.example" level="DEBUG" />
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
프로덕션 빌드에서 Lombok 필요
로그 레벨 적절히
log.debug
)는 프로덕션 환경에서 너무 많으면 성능 저하 가능.단일 책임
@Slf4j
는 Lombok이 제공하는 어노테이션으로, SLF4J 로거를 자동 생성하여 손쉽게 로깅 코드를 작성하도록 돕습니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다:
애플리케이션에서 로깅을 쉽게 설정하고 일관성 있는 형식의 로그를 남기려면 @Slf4j
를 적극 활용하는 것이 좋습니다.
추가 학습 자료