Logging in Go: 실습과 라이브러리
Grace Collins
Solutions Engineer · Leapcell

Key Takeaways
- Go는 기본적인 로깅 요구 사항을 위한 내장
log
패키지를 제공합니다. logrus
,zap
,zerolog
,slog
와 같은 타사 라이브러리는 고급 로깅 기능을 제공합니다.- 올바른 로깅 라이브러리 선택은 성능, 구조적 로깅 및 커뮤니티 지원에 따라 달라집니다.
로깅은 애플리케이션 동작에 대한 통찰력을 제공하고 디버깅 및 모니터링을 지원하는 소프트웨어 개발의 기본적인 측면입니다. Go(Golang)에서 개발자는 표준 라이브러리의 로깅 패키지와 다양한 타사 라이브러리에 액세스할 수 있으며, 각 라이브러리는 고유한 기능과 성능을 제공합니다. 이 기사에서는 Go에서 로깅을 구현하는 방법과 사용 가능한 가장 인기 있는 로깅 라이브러리를 검토합니다.
Go의 표준 라이브러리 log
패키지 사용
Go의 표준 라이브러리에는 기본적인 로깅 기능을 제공하는 log
패키지가 포함되어 있습니다. 이를 통해 개발자는 타임스탬프가 있는 로그 메시지를 출력할 수 있으며 세 가지 주요 함수 세트를 제공합니다.
- Print: 일반 정보를 기록합니다.
- Panic: 메시지를 기록하고 패닉을 트리거합니다.
- Fatal: 메시지를 기록하고
os.Exit(1)
을 사용하여 프로그램을 종료합니다.
log
패키지를 사용하는 간단한 예는 다음과 같습니다.
package main import ( "log" ) func main() { log.Println("This is a standard log message.") log.Printf("Logging with a formatted string: %d", 42) }
기본적으로 log
패키지는 표준 오류로 출력하고 각 로그 항목에 날짜와 시간을 포함합니다. 개발자는 다양한 플래그를 사용하여 로거의 동작을 사용자 정의할 수 있습니다.
Ldate
: 날짜를 추가합니다(예: 2009/01/23).Ltime
: 시간을 추가합니다(예: 01:23:23).Lmicroseconds
: 시간의 마이크로초 정밀도를 추가합니다.Llongfile
: 전체 파일 경로와 줄 번호를 추가합니다.Lshortfile
: 파일 이름과 줄 번호를 추가합니다.LUTC
: 로컬 시간대 대신 UTC 시간을 사용합니다.
예를 들어 로그 메시지에 날짜, 시간 및 짧은 파일 이름을 포함하려면 다음과 같이 합니다.
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
타사 로깅 라이브러리
표준 log
패키지는 기본적인 로깅 요구 사항에 적합하지만, 더 복잡한 애플리케이션에서는 구조적 로깅, 로그 수준 및 더 나은 성능과 같은 고급 기능이 필요할 수 있습니다. 여러 타사 라이브러리가 이러한 요구 사항을 해결합니다.
1. logrus
logrus
는 Go용 구조적 로거로, 유연한 API를 제공하고 개발자가 로그 메시지에서 필드를 정의할 수 있도록 합니다. 다양한 로그 수준과 다양한 로깅 시스템과 통합하기 위한 후크를 지원합니다.
예:
package main import ( log "github.com/sirupsen/logrus" ) func main() { log.WithFields(log.Fields{ "event": "event_name", "topic": "topic_name", }).Info("Event occurred") }
2. zap
Uber에서 개발한 zap
는 높은 성능과 구조적 로깅 기능으로 유명합니다. 인체공학적 로깅을 위한 "sugared" 로거와 더 나은 성능의 유형 안전 로거를 모두 제공합니다.
예:
package main import ( "go.uber.org/zap" ) func main() { logger, _ := zap.NewProduction() defer logger.Sync() logger.Info("This is an info message", zap.String("key", "value"), ) }
3. zerolog
zerolog
는 제로 할당 JSON 로깅을 제공하여 매우 효율적으로 만드는 것을 목표로 합니다. 성능이 중요한 애플리케이션을 위해 설계되었습니다.
예:
package main import ( "github.com/rs/zerolog/log" ) func main() { log.Info(). Str("key", "value"). Msg("This is an info message") }
4. slog
Go 1.21에 도입된 slog
는 표준 라이브러리에 추가된 구조적 로깅 패키지입니다. 외부 종속성 없이 구조화된 로그를 처리하는 간단하고 효율적인 방법을 제공합니다.
예:
package main import ( "log/slog" ) func main() { logger := slog.New(slog.NewJSONHandler(os.Stdout)) logger.Info("This is an info message", "key", "value") }
올바른 로깅 라이브러리 선택
Go 애플리케이션에 대한 로깅 라이브러리를 선택할 때 다음 요소를 고려하십시오.
- 성능: 고성능 애플리케이션의 경우
zap
및zerolog
와 같은 라이브러리는 속도와 낮은 메모리 할당에 최적화되어 있습니다. - 구조적 로깅: 구조적 로깅 (예: JSON 형식)이 필요한 경우
logrus
,zap
,zerolog
및 표준 라이브러리의slog
와 같은 라이브러리는 이러한 기능을 제공합니다. - 커뮤니티 및 유지 관리: 지속적인 지원 및 업데이트를 보장하기 위해 적극적으로 유지 관리되고 강력한 커뮤니티가 있는 라이브러리를 선택하십시오.
결론
Go는 표준 log
패키지의 기본 기능에서 logrus
, zap
, zerolog
및 새로 도입된 slog
와 같은 타사 라이브러리에서 제공하는 고급 기능에 이르기까지 로깅을 위한 다재다능한 생태계를 제공합니다. 효과적인 모니터링 및 디버깅 기능을 보장하기 위해 애플리케이션 요구 사항을 평가하여 가장 적합한 로깅 솔루션을 선택하십시오.
FAQs
타사 라이브러리는 구조적 로깅, 더 나은 성능 및 로그 수준 지원을 제공합니다.
zap
및 zerolog
는 속도와 낮은 메모리 할당에 최적화되어 있습니다.
slog
는 더 나은 JSON 로깅을 위해 Go 1.21에 도입된 Go의 새로운 구조적 로깅 패키지입니다.
저희 Leapcell은 Go 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하십시오 — 요청 없음, 요금 없음.
탁월한 비용 효율성
- 유휴 요금 없이 사용량에 따라 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 쉬운 동시성 처리를 위한 자동 확장.
- 제로 운영 오버헤드 — 구축에만 집중하십시오.
문서에서 자세히 알아보십시오!
X에서 저희를 팔로우하십시오: @LeapcellHQ