Go의 눈부시게 빠르고 체계적이며 레벨화된 로그인.
go get -u go.uber.org/zap
Zap은 Go의 최신 마이너 버전 두 개만 지원합니다.
성능이 좋지만 중요하지는 않은 상황에서는 SugaredLogger
를 사용하세요. 다른 구조화된 로깅 패키지보다 4~10배 빠르며 구조화된 API와 printf
스타일 API를 모두 포함합니다.
logger , _ := zap . NewProduction ()
defer logger . Sync () // flushes buffer, if any
sugar := logger . Sugar ()
sugar . Infow ( "failed to fetch URL" ,
// Structured context as loosely typed key-value pairs.
"url" , url ,
"attempt" , 3 ,
"backoff" , time . Second ,
)
sugar . Infof ( "Failed to fetch URL: %s" , url )
성능과 유형 안전성이 중요한 경우 Logger
사용하십시오. SugaredLogger
보다 훨씬 빠르고 할당량이 훨씬 적지만 구조화된 로깅만 지원합니다.
logger , _ := zap . NewProduction ()
defer logger . Sync ()
logger . Info ( "failed to fetch URL" ,
// Structured context as strongly typed Field values.
zap . String ( "url" , url ),
zap . Int ( "attempt" , 3 ),
zap . Duration ( "backoff" , time . Second ),
)
자세한 내용은 설명서 및 FAQ를 참조하세요.
핫 패스에 로그인하는 애플리케이션의 경우 리플렉션 기반 직렬화 및 문자열 형식 지정은 엄청나게 비용이 많이 듭니다. 즉, CPU를 많이 사용하고 소규모 할당을 많이 수행합니다. 다르게 말하면, encoding/json
및 fmt.Fprintf
사용하여 수많은 interface{}
애플리케이션 속도가 느려집니다.
Zap은 다른 접근 방식을 취합니다. 여기에는 반사가 없고 할당이 없는 JSON 인코더가 포함되어 있으며 기본 Logger
가능한 경우 직렬화 오버헤드와 할당을 방지하기 위해 노력합니다. 해당 기반 위에 높은 수준의 SugaredLogger
구축함으로써 zap을 통해 사용자는 모든 할당을 계산해야 하는 시기와 보다 친숙하고 느슨한 유형의 API를 선호하는 시기를 선택할 수 있습니다.
자체 벤치마킹 제품군으로 측정한 바와 같이, zap은 유사한 구조적 로깅 패키지보다 성능이 뛰어날 뿐만 아니라 표준 라이브러리보다 빠릅니다. 모든 벤치마크와 마찬가지로 이 벤치마크도 주의 깊게 살펴보세요. 1
메시지 및 10개 필드를 기록합니다.
패키지 | 시간 | Zap에 소요되는 시간 % | 할당된 객체 |
---|---|---|---|
⚡ 잽 | 656ns/작동 | +0% | 5개 할당/작업 |
⚡ zap (설탕) | 935ns/작동 | +43% | 10개 할당/작업 |
제로로그 | 380ns/작동 | -42% | 1 할당/작업 |
고킷 | 2249ns/작동 | +243% | 57개 할당/작업 |
슬로그(LogAttrs) | 2479ns/작동 | +278% | 할당량/작업 40개 |
강타 | 2481ns/작동 | +278% | 42개 할당/작업 |
정점/로그 | 9591ns/작동 | +1362% | 할당/작업 63개 |
로그15 | 11393ns/작동 | +1637% | 75개 할당/작업 |
로그러스 | 11654ns/작동 | +1677% | 79개 할당/작업 |
이미 10개의 컨텍스트 필드가 있는 로거를 사용하여 메시지를 기록합니다.
패키지 | 시간 | Zap에 소요되는 시간 % | 할당된 객체 |
---|---|---|---|
⚡ 잽 | 67ns/작동 | +0% | 0 할당/작업 |
⚡ zap (설탕) | 84ns/작동 | +25% | 1 할당/작업 |
제로로그 | 35ns/작동 | -48% | 0 할당/작업 |
강타 | 193ns/작동 | +188% | 0 할당/작업 |
슬로그(LogAttrs) | 200ns/연산 | +199% | 0 할당/작업 |
고킷 | 2460ns/작동 | +3572% | 56개 할당/작업 |
로그15 | 9038ns/작동 | +13390% | 할당량/작업 70개 |
정점/로그 | 9068ns/작동 | +13434% | 할당/작업 53개 |
로그러스 | 10521ns/작동 | +15603% | 68개 할당/작업 |
컨텍스트나 printf
스타일 템플릿 없이 정적 문자열을 기록합니다.
패키지 | 시간 | Zap에 소요되는 시간 % | 할당된 개체 |
---|---|---|---|
⚡ 잽 | 63ns/작동 | +0% | 0 할당/작업 |
⚡ zap (설탕) | 81ns/작동 | +29% | 1 할당/작업 |
제로로그 | 32ns/작동 | -49% | 0 할당/작업 |
표준 라이브러리 | 124ns/작동 | +97% | 1 할당/작업 |
강타 | 196ns/작동 | +211% | 0 할당/작업 |
슬로그(LogAttrs) | 200ns/연산 | +217% | 0 할당/작업 |
고킷 | 213ns/작동 | +238% | 9개 할당/작업 |
정점/로그 | 771ns/작동 | +1124% | 5개 할당/작업 |
로그러스 | 1439ns/작동 | +2184% | 할당/작업 23개 |
로그15 | 2069ns/작동 | +3184% | 할당량/작업 20개 |
모든 API가 마무리되었으며 1.x 시리즈 릴리스에서는 주요 변경 사항이 적용되지 않습니다. semver 인식 종속성 관리 시스템 사용자는 Zap을 ^1
에 고정해야 합니다.
우리는 귀하를 포함한 활동적이고 건강한 기여자 커뮤니티를 장려하고 지원합니다! 자세한 내용은 기여 가이드 및 행동 강령에 나와 있습니다. Zap 관리자는 문제와 끌어오기 요청을 주시하고 있지만 부정적인 행위가 있으면 [email protected]으로 신고하실 수도 있습니다. 해당 이메일 목록은 비공개적이고 안전한 공간입니다. Zap 관리자조차도 접근 권한이 없으므로 주저하지 말고 우리에게 높은 기준을 적용하십시오.
MIT 라이센스에 따라 출시되었습니다.
1 특히, 약간 오래된 버전의 다른 패키지를 벤치마킹할 수 있다는 점을 명심하세요. 버전은 benchmarks/go.mod 파일에 고정되어 있습니다. ↩