https://docs.spring.io/spring-boot/reference/features/logging.html#features.logging
Logging :: Spring Boot
By default, Spring Boot logs only to the console and does not write log files. If you want to write log files in addition to the console output, you need to set a logging.file.name or logging.file.path property (for example, in your application.properties)
docs.spring.io
스프링 부트는 기본적으로 로깅(logging) 설정을 자동으로 제공하여 애플리케이션의 로그를 쉽게 관리할 수 있게 해줍니다. 스프링 부트는 SLF4J(Simple Logging Facade for Java)를 기본 로깅 API로 사용하며, 기본 로깅 구현으로 Logback을 사용합니다. 이를 통해 개발자는 로깅 설정을 빠르게 적용하고, 필요에 따라 커스터마이징할 수 있습니다.
1. 스프링 부트 기본 로깅 설정
- 기본 로깅 라이브러리: 스프링 부트는 SLF4J와 Logback을 자동으로 구성하여 제공합니다.
- 로그 출력 포맷: 기본적으로 콘솔에 로그가 출력되며, 로깅 레벨, 스레드 이름, 로거 이름, 메시지 등이 포함됩니다.
- 기본 로깅 레벨: 스프링 부트는 디폴트 로깅 레벨로 INFO를 사용합니다. 따라서 INFO, WARN, ERROR 레벨의 로그만 출력되며, DEBUG와 TRACE는 기본적으로 출력되지 않습니다.
2. 로깅 레벨 설정
스프링 부트에서는 각 패키지나 클래스별로 로깅 레벨을 설정할 수 있습니다. 이를 통해 특정 패키지나 클래스의 로그를 더 자세히 출력하거나, 특정 로그를 제외할 수 있습니다.
application.properties에서 설정
# 전체 로그 레벨을 WARN으로 설정
logging.level.root=WARN
# org.springframework 패키지의 로그 레벨을 DEBUG로 설정
logging.level.org.springframework=DEBUG
# com.example 패키지의 로그 레벨을 INFO로 설정
logging.level.com.example=INFO
주요 로깅 레벨
- TRACE: 가장 낮은 레벨로, 상세한 로깅이 필요한 경우 사용합니다.
- DEBUG: 디버깅 정보 로깅에 사용되며, 개발 중에 유용합니다.
- INFO: 일반적인 애플리케이션 실행 정보로, 기본적으로 중요한 정보만 출력합니다. (기본값)
- WARN: 경고성 메시지를 출력하며, 애플리케이션에 잠재적인 문제가 있을 때 사용합니다.
- ERROR: 오류가 발생했을 때만 출력됩니다.
3. 콘솔과 파일에 로그 출력
스프링 부트는 기본적으로 로그를 콘솔에 출력하지만, 파일로 로그를 남길 수도 있습니다.
application.properties에서 로그 파일 설정
# 로그를 저장할 파일 경로
logging.file.name=app.log
# 로그를 저장할 디렉토리 (파일명이 지정되지 않으면 기본 파일명으로 로그 생성)
logging.file.path=/var/log/myapp
이 설정을 추가하면 로그가 app.log 파일에 저장되며, 콘솔과 파일에 동시에 출력됩니다. logging.file.name과 logging.file.path 중 하나만 설정할 수도 있습니다.
Logger
Logger는 스프링 부트 및 자바 애플리케이션에서 로그 메시지를 기록하고 관리하는 데 사용되는 주요 구성 요소입니다. 스프링 부트는 기본적으로 SLF4J(Simple Logging Facade for Java) API를 사용하며, 실제 로깅 구현은 Logback을 통해 이루어집니다. Logger를 사용하여 애플리케이션의 상태와 흐름을 추적할 수 있으며, 디버깅, 오류 추적 및 운영 시 필요한 정보를 로그에 남길 수 있습니다.
1. Logger 설정 및 사용법
스프링 부트에서 Logger를 사용하려면, 다음과 같이 클래스에 Logger 객체를 생성하여 사용합니다. SLF4J의 LoggerFactory를 사용해 로거를 생성하는 것이 일반적입니다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private static final Logger logger = LoggerFactory.getLogger(MyService.class);
public void performTask() {
logger.info("작업이 시작되었습니다.");
try {
// 로직 수행
logger.debug("세부 작업 진행 중...");
} catch (Exception e) {
logger.error("작업 중 오류 발생", e);
}
logger.info("작업이 완료되었습니다.");
}
}
- LoggerFactory.getLogger(MyService.class): 클래스 이름을 기반으로 Logger 객체를 생성
- 로그 레벨별 메서드:
- logger.trace("메시지"): TRACE 레벨 메시지 기록
- logger.debug("메시지"): DEBUG 레벨 메시지 기록
- logger.info("메시지"): INFO 레벨 메시지 기록
- logger.warn("메시지"): WARN 레벨 메시지 기록
- logger.error("메시지"): ERROR 레벨 메시지 기록
2. 주요 로깅 레벨과 사용 예시
- TRACE: 가장 상세한 레벨로, 주로 성능 측정, 데이터 흐름 확인 시 사용됩니다.
- DEBUG: 디버깅을 위한 로그로, 개발 시 주로 사용되며 세부적인 실행 정보를 기록합니다.
- INFO: 애플리케이션의 일반적인 상태와 주요 이벤트를 기록합니다.
- WARN: 경고성 메시지로, 큰 문제는 아니지만 주의가 필요한 상태를 나타냅니다.
- ERROR: 오류가 발생했을 때 기록하며, 애플리케이션 실행에 문제를 발생시키는 경우에 사용됩니다.
예시
logger.trace("세부 추적 로그 메시지");
logger.debug("디버깅 정보: {}", someVariable);
logger.info("서비스가 정상적으로 시작되었습니다.");
logger.warn("경고: 예상치 않은 동작이 감지되었습니다.");
logger.error("오류 발생: 예외 메시지", exception);
3. Logger 메시지 포맷팅
Logger는 성능을 고려하여 메시지 포맷팅을 지연 평가합니다. 즉, 로그 레벨에 따라 메시지가 출력되지 않으면 포맷팅을 수행하지 않습니다. {} 플레이스홀더를 사용하여 메시지 내 변수 값을 대체할 수 있습니다.
String username = "홍길동";
logger.info("사용자 {}가 로그인했습니다.", username);
- 출력: 사용자 홍길동가 로그인했습니다.
4. Logger의 레벨 설정 (application.properties)
스프링 부트에서는 application.properties 파일에서 로거의 기본 레벨을 설정할 수 있습니다. 특정 패키지 또는 전체 애플리케이션에 대해 로깅 레벨을 지정할 수 있습니다.
# 전체 애플리케이션에 대한 기본 로그 레벨
logging.level.root=WARN
# 특정 패키지에 대해 다른 로그 레벨 설정
logging.level.com.example=DEBUG
logging.level.org.springframework.web=INFO
'Backend > Spring' 카테고리의 다른 글
| JDBC API - JDBC Template (0) | 2024.11.19 |
|---|---|
| SpringBoot : DataSource (0) | 2024.11.19 |
| Spring Application 이벤트 리스너 (0) | 2024.11.19 |
| 스프링 AOP 포인트컷 표현식 (0) | 2024.11.19 |
| Spring AOP (0) | 2024.11.19 |