로깅(Logging)은 애플리케이션의 동작을 기록하여 디버깅, 문제 해결, 운영 모니터링 등을 돕는 필수적인 도구입니다. Spring Boot는 기본적으로 SLF4J와 Logback을 사용하며, 간단한 설정으로 강력한 로깅 기능을 제공합니다. 이 글에서는 실무에서 자주 사용되는 Lombok의 @Slf4j 활용을 시작으로, 로깅의 기본 구현, 로그 레벨 관리, Logback 설정, 그리고 실무에서의 모범 사례를 살펴봅니다.
1. Lombok @Slf4j 활용
실무에서는 Lombok의 @Slf4j
애노테이션을 사용해 Logger 객체를 간소화하는 방식이 널리 사용됩니다. Logger 객체를 직접 선언할 필요 없이 바로 log
객체를 사용할 수 있어 코드가 깔끔해집니다.
1) Lombok 의존성 추가
Maven
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
Gradle
implementation 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
2) @Slf4j 사용 예제
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class UserController {
public void signup(SignupRequest request) {
log.info("[회원가입 시작] email={}", request.getEmail());
try {
userService.signup(request); // 비즈니스 로직
log.info("[회원가입 성공] email={}", request.getEmail());
} catch (Exception e) {
log.error("[회원가입 실패] email={}, error={}",
request.getEmail(), e.getMessage(), e);
throw e;
}
}
}
장점
- Logger 객체 선언 불필요:
@Slf4j
로 Logger 객체 선언 없이 바로log
객체를 사용할 수 있습니다. - 간결한 코드: 로깅 관련 코드가 더 깔끔해지고 유지보수가 용이해집니다.
2. Spring Boot에서 로깅 구현하기
Spring Boot는 기본적으로 SLF4J(Simple Logging Facade for Java)와 Logback을 사용해 로깅을 지원합니다. spring-boot-starter
를 추가하면 별도의 설정 없이도 기본 로깅 기능을 사용할 수 있습니다.
기본 로깅 예제
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LoggingController {
private static final Logger logger = LoggerFactory.getLogger(LoggingController.class);
@GetMapping("/log")
public String logExample() {
logger.info("INFO: Logging example endpoint accessed");
logger.debug("DEBUG: Detailed debug message");
logger.warn("WARN: This is a warning message");
logger.error("ERROR: This is an error message");
return "Check your logs for log messages!";
}
}
Spring Boot는 기본적으로 INFO 레벨 이상의 로그를 출력합니다. 위 코드를 실행하고 /log
엔드포인트에 접근하면 로그가 출력됩니다.
3. 로그 레벨 관리
Spring Boot에서는 로그 레벨을 설정하여 출력할 로그를 제어할 수 있습니다. 개발 환경과 운영 환경에 따라 적절한 로그 레벨을 설정하는 것이 중요합니다.
1) 로그 레벨의 의미
- TRACE: 가장 상세한 로그. 디버깅용으로 사용.
- DEBUG: 개발 중에 유용한 디버깅 정보.
- INFO: 일반적인 실행 정보.
- WARN: 잠재적인 문제.
- ERROR: 오류 발생.
2) 로그 레벨 설정
로그 레벨은 application.properties
또는 application.yml
에서 설정할 수 있습니다.
application.properties 예제:
# 전체 로그 레벨
logging.level.root=INFO
# 특정 패키지의 로그 레벨
logging.level.com.example=DEBUG
logging.level.org.springframework.web=ERROR
4. Logback 설정
Spring Boot는 기본적으로 Logback을 사용하며, logback-spring.xml
파일을 추가하여 로깅 동작을 커스터마이징할 수 있습니다. 아래는 자주 사용하는 콘솔 출력 및 파일 저장 설정 예제입니다.
logback-spring.xml
<configuration>
<!-- 콘솔에 로그 출력 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 파일에 로그 저장 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/application.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 로그 레벨 설정 -->
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
설명
- ConsoleAppender: 로그를 콘솔에 출력합니다.
- RollingFileAppender: 로그를 파일에 저장합니다.
<root level="info">
: 기본 로그 레벨을 INFO로 설정합니다.
5. 실무에서의 로깅 모범 사례
Lombok의 @Slf4j 활용
- Logger 객체 선언을 생략하고 간결한 로깅 구현이 가능합니다.
환경별 로그 레벨 설정
- 개발 환경에서는 DEBUG 또는 TRACE를 활성화하고, 운영 환경에서는 INFO 이상으로 제한합니다.
로그 파일 관리
- 로그 파일은 너무 커지지 않도록 파일 분리(롤링)와 보존 정책을 설정합니다.
민감 정보 제외
- 개인 정보나 보안 정보를 로그에 남기지 않도록 주의합니다.
'SpringBoot' 카테고리의 다른 글
싱글톤 패턴과 스프링의 싱글톤 관리 (0) | 2025.04.30 |
---|---|
Spring Boot: 데이터 검증(Validation) (1) | 2024.11.22 |
Spring Boot: @ExceptionHandler와 @ControllerAdvice를 활용한 예외처리 (0) | 2024.11.20 |
Spring Boot: Form 데이터 처리 (0) | 2024.11.19 |
Spring Boot: 스프링 MVC 패턴 (0) | 2024.11.18 |