Logger 썸네일형 리스트형 [Golang] slog : Context Handler 패턴 Go 1.21 버전부터 추가된 slog 는 구조화된 로깅을 지원하며,특히 Handler 기반 구조를 통해 로깅 로직을 유연하게 확장 할 수 있는데요. 실무에서는 로그 추적을 위해서 다음과 같은 메타데이터를 남기는 경우가 많이 있습니다.request_idtrace_iduser_idserviceippath위 값들은 고유 값들로 각 요청과 종료의 범위, 흐름을 파악할 때 유용하게 사용이 됩니다.이 값을 매번 수동으로 넣는 방식을 사용하면 번거럽고, 누락하는 문제가 발생하기도 합니다.logger.Info("payment completed", slog.String("request_id", requestID), slog.String("user_id", userID),) 위 로그만 본다면 단순하고 어려울 것도 없지만.. 더보기 [Golang] Slog를 활용한 로그 라우팅 설계 이번 포스팅에서는 'slog' 를 활용해 로그의 라우팅을 설계해보겠습니다.실제 서비스에서 발생하는 로그들의 가치에도 차이가 있습니다. 서비스의 정상 흐름을 보여주는'Info' 로그와 에러 정보를 알려주는 'Error' 로그는전달되는 속도와 저장되는 장소, 그리고 읽는 방식이 달라야 합니다. 1. 왜 로그는 왜 라우팅해야 하는가?대부분의 경우 로그들을 단순히 os.Stdout로 출력을 시키게 되는데요.보통은 큰 문제가 없지만 로그가 많고 서비스의 규모가 커지면 다음과 같은 문제에 직면하게 됩니다.가독성 : 수만 건의 로그 사이에 중요한 에러 로그가 묻혀버립니다.효율성 : 수만 건의 정상 로그 사이 에러 로그가 섞여 있을 경우 필터링의 부하비용 및 관리 : 분석용 로그와 시스템 에러의 채널을 서로 분리하여.. 더보기 [Golang] Slog를 활용한 로그 샘플링 구현하기 지난 포스팅에서는 "slog"를 활용한 민감 정보를 가리는 마스킹 핸들러를 알아보았습니다.이번에는 보안만큼 중요한 운영 비용과 시스템 과부화 관리에 대해서 함께 알아보겠습니다.초당 수만 건씩 발생하는 단순 상태 로그들을 전부 저장하면 로그 서버(ELK,CloudWatch)의 비용이 계속 증가하게 됩니다.중요한 에러 로그를 찾고, 검색하는 것에 방해가 되는 경우가 많습니다. 이때 필요한 방법이 "로그 샘플링" 입니다. 1. 작동 원리특정 범위의 로그는 설정한 비율로만 남기고 중요한 로그는 유실 없이 기록하는 전략입니다.특정 범위 로그 : 로그 레벨 (debug,info,warn.... 등)설정한 비율 : N회당 1개 (10번 중 1번 출력하기) 2. 전체 코드slog.handler 인터페이스를 구현합니다.. 더보기 이전 1 다음