Go의 slog: 현대적인 구조화된 로깅
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
Go 개발자, 특히 구조화된 로깅 및 로그 관리에 관심 있는 중간 수준 이상의 개발자
핵심 요약
- 구조화된 로깅을 지원하는
log/slog
패키지의 주요 기능은 메시지, 심각도 레벨, 커스텀 핸들러, 로그 그룹핑 slog.Info
,slog.InfoContext
등 레벨별 로깅 함수와TextHandler
,JsonHandler
를 통한 JSON/텍스트 포맷 출력 제공LogAttrs
메서드를 사용하면 타입 변환 과정을 생략하여 로깅 효율성 향상 가능With
메서드로 공통 속성 추가하여 중복된 키-값 쌍 입력 방지
섹션별 세부 요약
1. slog 패키지 소개
- Go 1.21.0에서 도입된
log/slog
은 구조화된 로깅을 지원 - 전통적 로깅 대비 가독성 향상 및 처리/분석/검색 효율성 증대
- 각 로그 항목은 메시지, 심각도 레벨, 속성으로 구성된 키-값 쌍 형태
2. 기본 사용 예시
slog.Info("message", "key", "value")
및slog.InfoContext(ctx, "message", "key", "value")
사용 가능- 기본 로거는
slog.Default()
를 통해 접근 가능 slog.SetDefault(logger)
로 전역 로거 설정 가능
3. 핸들러 구성
TextHandler
와JsonHandler
를 통해 텍스트/JSON 포맷 로그 출력slog.New(slog.NewTextHandler(os.Stdout, nil))
로 텍스트 핸들러 생성slog.New(slog.NewJSONHandler(os.Stdout, nil))
로 JSON 핸들러 생성
4. 로그 그룹핑
WithGroup("group_name")
을 통해 관련 속성 그룹화- JSON 핸들러: 그룹명이 키로, 값이 JSON 객체
- 텍스트 핸들러:
groupName.key=value
형식으로 표시
5. 효율적인 로깅 방법
LogAttrs
메서드 사용:slog.LogAttrs(ctx, level, msg, attrs...)
With
메서드로 공통 속성 추가 가능 (logger := jsonLogger.With("systemID", "s1")
)
6. 핸들러 옵션 설정
HandlerOptions
를 통해 소스 위치 표시, 최소 로그 레벨, 속성 재작성 설정 가능- 예:
AddSource: true
,Level: slog.LevelError
결론
- JSON/텍스트 포맷을 지원하는
TextHandler
/JsonHandler
활용을 권장 LogAttrs
메서드를 사용하여 타입 변환 과정 생략으로 로깅 효율성 향상With
메서드로 공통 속성 추가하여 중복 입력 방지HandlerOptions
를 통해 로그 출력 설정을 세부적으로 조정 가능