[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 구성요소
-
API (slf4j)
로깅 인터페이스
-
Binding (logback)
여러 Logger로 연결해 줌. slf4j를 구현한 클래스에서 Binding으로 연결된 Logger의 API를 호출 함. Binding은 한개만 추가 해야 함
-
Bridge
호출을 하게 되면 slf4j 인터페이스로 연결 된다.
Spring boot에서 Logger 사용하기
-
LoggerFactory 사용
private static final Logger log = LoggerFactory.getLogger(TestController.class);
-
Lombok 어노테이션 활용
@Slf4j public class TestController { .. }
-
예제
log.info("user: {}, message: {}", user, message);