[Logging] 1.로깅

로깅에 대해 알아보고 Spring boot에서 사용해보기

로깅

OS나 소프트웨어가 실행 중에 발생하는 이벤트를 기록하는 행위

서비스 동작 상태, 장애 파악과 알림에 주로 활용

로깅 레벨

Level Description
Fatal 매우 심각한 에러, 프로그램이 종료되는 경우
(프로그램이 정상적으로 종료되지 않기 떄문에 로그가 남지 않을 수 있음)
Error 에러가 발생했지만, 프로그램이 종료되지는 않는 경우.
(외부 API나 시스템 내부에 에러가 발생했을때 주로 사용)
Warn 에러가 될 수 있는 가능성이 있는 경우.
(인 메모리 캐시의 용량이 거의 차거나, DB Connection이 오래 걸리는 경우)
Info 동작 상태를 간결하게 보여주는 경우
Debug Info 레벨 보다 자세한 정보가 필요한 경우
(권한이 없어 디버깅이 불가능한 경우)
Trace Debug보다 자세한 정보가 필요한 경우. 개발환경에서 버그를 해결하기 위해 사용한다.

의도하지 않은 Exception의 경우 Error레벨 이상

로그 메시지

로그 메시지의 독자는 Machine과 Human이다.

Machine에서 파싱하기 쉽게 메시지에는 json과 같이 파싱하기 좋게 구분자를 사용한다.

Human이 로그 정보를 파악하기 위해 예외, 이유, 후속조치 등 문맥을 담는다.

로깅 라이브러리

slf4j

spring boot에서 사용되는 로깅 추상화 라이브러리

spring boot에서 실제 slf4j의 구현체는 logback으로 되어 있음.

slf4j 구성요소

Spring boot에서 Logger 사용하기

  1. LoggerFactory 사용

    private static final Logger log = LoggerFactory.getLogger(TestController.class);
    
  2. Lombok 어노테이션 활용

    @Slf4j
    public class TestController {
        ..
    }
    
  3. 예제

    log.info("user: {}, message: {}", user, message);