안녕하세요! 오늘은 스프링부트 애플리케이션에서 로그 파일을 효과적으로 설정하고 관리하는 방법에 대해 상세히 알아보겠습니다. 로그는 애플리케이션 모니터링과 디버깅에 필수적인 요소이므로, 제대로 설정하는 것이 매우 중요합니다.
1. 스프링부트 기본 로깅 이해하기
스프링부트는 기본적으로 Commons Logging을 사용하지만, 실제로는 Logback을 통해 로깅을 구현합니다. 별도의 설정 없이도 다음과 같은 기능을 제공합니다:
- 콘솔 출력
- 선택적 파일 출력
- ERROR, WARN, INFO, DEBUG, TRACE 로그 레벨 지원
2. logback 설정하기
src/main/resources
디렉토리에 logback-spring.xml
파일을 생성하여 로깅을 설정할 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./logs"/>
<!-- 콘솔 애펜더 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<!-- 파일 애펜더 -->
<appender name="File" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/spring-boot-logger.log</file>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/archived/spring-boot-logger-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 루트 로거 설정 -->
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="File"/>
</root>
</configuration>
3. 로그 파일 생성 설정
application.properties(또는 application.yml)에서도 기본적인 로그 파일 설정이 가능합니다:
# 로그 파일 경로 설정
logging.file.path=./logs
# 로그 파일명 설정
logging.file.name=./logs/application.log
# 로그 파일 크기 제한
logging.logback.rollingpolicy.max-file-size=10MB
# 로그 파일 보관 기간
logging.logback.rollingpolicy.max-history=30
4. 로그 레벨 설정
각 패키지별로 다른 로그 레벨을 설정할 수 있습니다:
# 루트 레벨 설정
logging.level.root=INFO
# 특정 패키지 레벨 설정
logging.level.com.example.myapp=DEBUG
logging.level.org.springframework.web=ERROR
5. 로그 포맷 커스터마이징
로그 출력 포맷을 커스터마이징하려면 다음과 같이 설정합니다:
# 콘솔 출력 포맷
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
# 파일 출력 포맷
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
6. 실전 활용 예제
실제 애플리케이션에서는 다음과 같이 로거를 사용할 수 있습니다:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
public void createUser(String username) {
logger.debug("사용자 생성 시도: {}", username);
try {
// 사용자 생성 로직
logger.info("사용자 생성 성공: {}", username);
} catch (Exception e) {
logger.error("사용자 생성 실패: {}", username, e);
throw e;
}
}
}
💡 프로 팁
- 환경별 설정:
logback-spring.xml
에서 스프링 프로파일을 사용하여 환경별로 다른 로깅 설정을 적용할 수 있습니다. - 로그 압축: 오래된 로그 파일은 자동으로 압축하여 저장 공간을 절약하세요.
- MDC 활용: 트랜잭션 ID나 사용자 정보를 로그에 포함하여 추적성을 높이세요.
- 비동기 로깅: 성능 향상을 위해 비동기 로깅을 고려해보세요.
마치며
적절한 로깅 설정은 애플리케이션 운영과 문제 해결에 큰 도움이 됩니다. 위 가이드를 참고하여 프로젝트에 맞는 최적의 로깅 설정을 구성해보세요!