Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Blazing fast, structured, leveled logging in Go.

License

NotificationsYou must be signed in to change notification settings

uber-go/zap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Blazing fast, structured, leveled logging in Go.

Zap logo

GoDocBuild StatusCoverage Status

Installation

go get -u go.uber.org/zap

Note that zap only supports the two most recent minor versions of Go.

Quick Start

In contexts where performance is nice, but not critical, use theSugaredLogger. It's 4-10x faster than other structured loggingpackages and includes both structured andprintf-style APIs.

logger,_:=zap.NewProduction()deferlogger.Sync()// flushes buffer, if anysugar:=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)

When performance and type safety are critical, use theLogger. It's evenfaster than theSugaredLogger and allocates far less, but it only supportsstructured logging.

logger,_:=zap.NewProduction()deferlogger.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),)

See thedocumentation andFAQ for more details.

Performance

For applications that log in the hot path, reflection-based serialization andstring formatting are prohibitively expensive — they're CPU-intensiveand make many small allocations. Put differently, usingencoding/json andfmt.Fprintf to log tons ofinterface{}s makes your application slow.

Zap takes a different approach. It includes a reflection-free, zero-allocationJSON encoder, and the baseLogger strives to avoid serialization overheadand allocations wherever possible. By building the high-levelSugaredLoggeron that foundation, zap lets userschoose when they need to count everyallocation and when they'd prefer a more familiar, loosely typed API.

As measured by its ownbenchmarking suite, not only is zap more performantthan comparable structured logging packages — it's also faster than thestandard library. Like all benchmarks, take these with a grain of salt.1

Log a message and 10 fields:

PackageTimeTime % to zapObjects Allocated
⚡ zap656 ns/op+0%5 allocs/op
⚡ zap (sugared)935 ns/op+43%10 allocs/op
zerolog380 ns/op-42%1 allocs/op
go-kit2249 ns/op+243%57 allocs/op
slog (LogAttrs)2479 ns/op+278%40 allocs/op
slog2481 ns/op+278%42 allocs/op
apex/log9591 ns/op+1362%63 allocs/op
log1511393 ns/op+1637%75 allocs/op
logrus11654 ns/op+1677%79 allocs/op

Log a message with a logger that already has 10 fields of context:

PackageTimeTime % to zapObjects Allocated
⚡ zap67 ns/op+0%0 allocs/op
⚡ zap (sugared)84 ns/op+25%1 allocs/op
zerolog35 ns/op-48%0 allocs/op
slog193 ns/op+188%0 allocs/op
slog (LogAttrs)200 ns/op+199%0 allocs/op
go-kit2460 ns/op+3572%56 allocs/op
log159038 ns/op+13390%70 allocs/op
apex/log9068 ns/op+13434%53 allocs/op
logrus10521 ns/op+15603%68 allocs/op

Log a static string, without any context orprintf-style templating:

PackageTimeTime % to zapObjects Allocated
⚡ zap63 ns/op+0%0 allocs/op
⚡ zap (sugared)81 ns/op+29%1 allocs/op
zerolog32 ns/op-49%0 allocs/op
standard library124 ns/op+97%1 allocs/op
slog196 ns/op+211%0 allocs/op
slog (LogAttrs)200 ns/op+217%0 allocs/op
go-kit213 ns/op+238%9 allocs/op
apex/log771 ns/op+1124%5 allocs/op
logrus1439 ns/op+2184%23 allocs/op
log152069 ns/op+3184%20 allocs/op

Development Status: Stable

All APIs are finalized, and no breaking changes will be made in the 1.x seriesof releases. Users of semver-aware dependency management systems should pinzap to^1.

Contributing

We encourage and support an active, healthy community of contributors —including you! Details are in thecontribution guide andthecode of conduct. The zap maintainers keep an eye onissues and pull requests, but you can also report any negative conduct tooss-conduct@uber.com. That email list is a private, safe space; even the zapmaintainers don't have access, so don't hesitate to hold us to a highstandard.


Released under theMIT License.

1 In particular, keep in mind that we may bebenchmarking against slightly older versions of other packages. Versions arepinned in thebenchmarks/go.mod file.

About

Blazing fast, structured, leveled logging in Go.

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors143

Languages


[8]ページ先頭

©2009-2025 Movatter.jp