Study/spring

[Java] Spring Boot 3 @Slf4j 어노테이션 설정 방법

 

@Slf4j란?

@Slf4j는 Lombok 라이브러리에서 제공하는 어노테이션으로, 클래스에 적용하면 SLF4J(Simple Logging Facade for Java) 로깅 인터페이스를 사용하여 로그를 기록할 수 있는 로거 인스턴스가 자동으로 생성됩니다. 이를 통해 별도로 로거 인스턴스를 선언할 필요 없이 로그를 간편하게 사용할 수 있습니다.

 

@Slf4j 어노테이션 사용 전/후 코드 비교

@Slf4j 어노테이션이 없을 때

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class DemoService {

    private static final Logger log = LoggerFactory.getLogger(DemoService.class);

    public void save() {
        log.info("Save Demo");
    }
}

 

@Slf4j 어노테이션이 있을 때

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

@Slf4j
@Service
public class DemoService {

    public void save() {
        log.info("Save Demo");
    }
}

 

@Slf4j 어노테이션을 사용하면 로그를 사용하고자 하는 클래스에 매번 로그 인스턴스를 선언하지 않아도 되며 클래스 이름이 바뀔 때마다 코드를 수정하지 않아도 됩니다.

 

또, Slf4j(Simple Logging Facade For Java)는 다양한 로깅 프레임워크에 대한 추상화를 제공하는 라이브러리라서 다른 로그 라이브러리로 바꾸고 싶으면 코드 수정 없이 원하는 로그 라이브러리를 추가하고 설정만 변경하면 됩니다.

 

 

 

 

Spring Boot에서 @Slf4j 사용법

@Slf4j를 사용하려면 Lombok 라이브러리가 있어야 합니다.

스프링 부트에서 Lombok 라이브러리를 추가하는 방법입니다.

@Slf4j 적용을 위해 Maven 의존성 추가

<dependencies>
	...

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>

	...
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
            </exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

 

@Slf4j 적용을 위해 Gradle 의존성 추가

// Gradle - Groovy
dependencies {
	...
  	compileOnly 'org.projectlombok:lombok'
  	annotationProcessor 'org.projectlombok:lombok'
	...
}

// Gradle - Kotlin
dependencies {
	...
  	compileOnly("org.projectlombok:lombok")
  	annotationProcessor("org.projectlombok:lombok")
	...
}

 

@Slf4j 적용

로그를 출력하고자 하는 클래스에 @Slf4j 어노테이션만 붙여주면 됩니다.

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

@Slf4j
@Service
public class DemoService {

    public void save() {
        log.info("Save Demo Info");
        log.debug("Save Demo Debug");
        log.warn("Save Demo Warn");
        log.error("Save Demo Error");
        log.trace("Save Demo Trace");
    }
}

로그 출력 결과
로그 출력 결과

 

로그 레벨 설정

스프링 부트의 기본 로그 설정때문에 Trace나 Debug 레벨의 로그는 출력이 안되는데, Trace나 Debug 로그를 출력하고싶다면 application 파일에 원하는 클래스의 로그 레벨을 추가하면 됩니다.

# application.yml
logging:
  level:
    com.example.demo1.DemoService: TRACE
    
# application.properties
logging.level.com.example.demo1.DemoService=TRACE