스프링 부트는 기본적으로 로깅(logging) 설정을 자동으로 제공하여 애플리케이션의 로그를 쉽게 관리할 수 있게 해줍니다. 스프링 부트는 SLF4J(Simple Logging Facade for Java)를 기본 로깅 API로 사용하며, 기본 로깅 구현으로 Logback을 사용합니다. 이를 통해 개발자는 로깅 설정을 빠르게 적용하고, 필요에 따라 커스터마이징할 수 있습니다.
SLF4J와 Logback을 자동으로 구성하여 제공합니다.콘솔에 로그가 출력되며, 로깅 레벨, 스레드 이름, 로거 이름, 메시지 등이 포함됩니다.INFO를 사용합니다. 따라서 INFO, WARN, ERROR 레벨의 로그만 출력되며, DEBUG와 TRACE는 기본적으로 출력되지 않습니다.스프링 부트에서는 각 패키지나 클래스별로 로깅 레벨을 설정할 수 있습니다. 이를 통해 특정 패키지나 클래스의 로그를 더 자세히 출력하거나, 특정 로그를 제외할 수 있습니다.
# 전체 로그 레벨을 WARN으로 설정
logging.level.root=WARN
# org.springframework 패키지의 로그 레벨을 DEBUG로 설정
logging.level.org.springframework=DEBUG
# com.example 패키지의 로그 레벨을 INFO로 설정
logging.level.com.example=INFO
스프링 부트는 기본적으로 로그를 콘솔에 출력하지만, 파일로 로그를 남길 수도 있습니다.
# 로그를 저장할 파일 경로
logging.file.name=app.log
# 로그를 저장할 디렉토리 (파일명이 지정되지 않으면 기본 파일명으로 로그 생성)
logging.file.path=/var/log/myapp
이 설정을 추가하면 로그가 app.log 파일에 저장되며, 콘솔과 파일에 동시에 출력됩니다. logging.file.name과 logging.file.path 중 하나만 설정할 수도 있습니다.
Logger는 스프링 부트 및 자바 애플리케이션에서 로그 메시지를 기록하고 관리하는 데 사용되는 주요 구성 요소입니다. 스프링 부트는 기본적으로 SLF4J(Simple Logging Facade for Java) API를 사용하며, 실제 로깅 구현은 Logback을 통해 이루어집니다. Logger를 사용하여 애플리케이션의 상태와 흐름을 추적할 수 있으며, 디버깅, 오류 추적 및 운영 시 필요한 정보를 로그에 남길 수 있습니다.
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 레벨 메시지 기록logger.trace("세부 추적 로그 메시지");
logger.debug("디버깅 정보: {}", someVariable);
logger.info("서비스가 정상적으로 시작되었습니다.");
logger.warn("경고: 예상치 않은 동작이 감지되었습니다.");
logger.error("오류 발생: 예외 메시지", exception);
Logger 메시지 포맷팅Logger는 성능을 고려하여 메시지 포맷팅을 지연 평가합니다. 즉, 로그 레벨에 따라 메시지가 출력되지 않으면 포맷팅을 수행하지 않습니다. {} 플레이스홀더를 사용하여 메시지 내 변수 값을 대체할 수 있습니다.
String username = "홍길동";
logger.info("사용자 {}가 로그인했습니다.", username);
사용자 홍길동가 로그인했습니다.Logger의 레벨 설정 (application.properties)스프링 부트에서는 application.properties 파일에서 로거의 기본 레벨을 설정할 수 있습니다. 특정 패키지 또는 전체 애플리케이션에 대해 로깅 레벨을 지정할 수 있습니다.
# 전체 애플리케이션에 대한 기본 로그 레벨
logging.level.root=WARN
# 특정 패키지에 대해 다른 로그 레벨 설정
logging.level.com.example=DEBUG
logging.level.org.springframework.web=INFO