Skip to content

zap vs zerolog

Which should you use? A side-by-side look at what each one does, who it suits, what it costs, how hard it is to set up, and where each falls short.

zap

Open source · MIT

A fast, structured logging library for Go programs.

zerolog

Open source · MIT

A fast Go logging library that writes structured JSON with almost no memory allocation.

The short answer

Choose zap if you need…

  • Go developers building services that log heavily
  • Teams that want structured, machine-readable log output
  • Projects where logging overhead in hot code paths is a concern
  • Developers who want a choice between typed and loosely typed logging APIs

Choose zerolog if you need…

  • Go developers who want machine-readable JSON logs
  • Backend services where logging overhead matters
  • Teams that log structured fields and send logs to log-processing tools
  • Developers who want a chained, typed logging API

Side-by-side

zapzerolog
TypeLibraryLibrary
PriceFree and open sourceFree and open source
LicenceMITMIT
GitHub stars24.7k12.5k
Setup difficultyBeginnerBeginner
How you get itInstall with a package managerInstall with a package manager
Main languageGoGo
Last code update51 days ago23 days ago

What each one is

zap

Zap is a logging library for the Go programming language. It writes log messages with levels (such as info or error) and attached key-value details, so logs are easy to search and analyze. Developers use it in server code where logging speed matters, and it offers two APIs: a faster strongly typed one and a looser, more convenient one.

zerolog

Zerolog is a logging library for the Go programming language. It records events as structured JSON (or optionally CBOR), where each message can carry typed key-value fields such as strings, numbers, and errors. It is built to avoid allocations and reflection, which the README says keeps it fast and light on memory.

Best for

zap

  • Go developers building services that log heavily
  • Teams that want structured, machine-readable log output
  • Projects where logging overhead in hot code paths is a concern
  • Developers who want a choice between typed and loosely typed logging APIs

zerolog

  • Go developers who want machine-readable JSON logs
  • Backend services where logging overhead matters
  • Teams that log structured fields and send logs to log-processing tools
  • Developers who want a chained, typed logging API

Strengths

zap

  • The README reports strong benchmark results against several other Go logging packages, with the caveat that benchmarks should be taken with a grain of salt
  • Offers both a strongly typed Logger and a looser SugaredLogger so you can choose the trade-off
  • Stable API with a stated commitment to no breaking changes in the 1.x series

zerolog

  • Designed for low or zero allocation, per the README benchmarks section
  • Strongly typed fields and a simple chaining API
  • Supports leveled logging, sampling, hooks, and log/slog integration

Not ideal for

zap

  • Non-Go projects, since it is only for Go (reason: it is a Go library)
  • Beginners who only need simple print statements (reason: setup and typed fields add concepts to learn)
  • Projects that must use only the standard library's log/slog (reason: zap is a separate dependency with its own API)

zerolog

  • People who want readable colored console output by default: the README says pretty printing via ConsoleWriter is available but inefficient
  • Non-Go projects, since it is a Go package
  • Beginners who need a full logging framework with rotation or file management, which the README does not describe

Trade-offs

zap

  • Only supports the two most recent minor versions of Go, according to the README
  • Typed Logger API requires more verbose code than the SugaredLogger
  • Performance claims come from the project's own benchmark suite, so independent results may differ

zerolog

  • Chained calls silently do nothing unless Msg or Msgf is called, and the compiler will not warn you
  • By default it writes every level, including trace, to stderr until SetGlobalLevel is called
  • Pretty console output is available but slower, as the README notes

Getting started

zap

Install zap into a Go module

go get -u go.uber.org/zap
Step-by-step guide: how to use zap

zerolog

Install the global logger package

go get -u github.com/rs/zerolog/log
Step-by-step guide: how to use zerolog

Frequently asked questions

What is the difference between zap and zerolog?

zap: A fast, structured logging library for Go programs. zerolog: A fast Go logging library that writes structured JSON with almost no memory allocation. zap suits go developers building services that log heavily, while zerolog suits go developers who want machine-readable json logs.

Are zap and zerolog free?

zap: Free and open source. zerolog: Free and open source.

Is zap or zerolog more popular?

zap has more GitHub stars (24.7k) than zerolog (12.5k). Popularity isn't the same as fit — check which one matches your use case above.

What are other alternatives to zap and zerolog?

Other options people compare them with include Logrus.

Keep comparing

Built from our catalogue entries for both products: open-source details come from each project's README (AI-assisted, refreshed weekly) and GitHub data; AI-tool details are editorial. Spotted something wrong? Let us know from either product's page.