Go 语言的零内存分配 JSON 日志库,采用链式 API,支持分级与采样日志。
uber-go/zap
Go 语言的高性能结构化分级日志库,兼具零分配的 Logger 与更灵活的 SugaredLogger。
- Star
- 24,678
- Fork
- 1,575
- 未关闭 Issue
- 201
- 最近提交
- 上个月
这是什么?
Zap 是一个 Go 语言日志库,输出结构化日志,支持带类型的键值字段和日志级别。它面向在热点代码路径上大量打日志的应用,避免了基于反射的序列化和字符串格式化带来的 CPU 与内存分配开销。
Zap 提供两套 API:Logger 使用强类型的 Field,大多数调用不产生内存分配;SugaredLogger 接受松散类型的键值对,并支持 printf 风格格式化,性能略低但写法更熟悉。两者都建立在无反射的 JSON 编码器之上。项目自带基准测试,并与 zerolog、slog、logrus 等库做了对比。
该库在 pkg.go.dev 提供完整文档,API 已标记为稳定,1.x 系列不会引入破坏性变更。它支持 Go 最近的两个次版本。
核心功能
- 01基于强类型 Field 的结构化日志。
- 02SugaredLogger 提供松散类型键值对和 printf 风格的写法。
- 03无反射、零分配的 JSON 编码器。
- 04支持分级日志,并提供生产和开发两种预设配置。
适用场景
- 对延迟敏感、需要控制内存分配的 Go 服务日志记录。
- 输出可被日志采集系统解析的 JSON 日志。
- 在后端服务中为请求附加结构化上下文字段。
快速上手
- 1
使用 go get 安装 zap 库
go get -u go.uber.org/zap - 2
创建生产环境日志记录器并使用 SugaredLogger 记录日志
使用前须知
- 仅支持最近的两个 Go 次要版本。
收录于专题
标签
常见问题
- zap 是什么?
- Go 语言的高性能结构化分级日志库,兼具零分配的 Logger 与更灵活的 SugaredLogger。 Zap 是一个 Go 语言日志库,输出结构化日志,支持带类型的键值字段和日志级别。它面向在热点代码路径上大量打日志的应用,避免了基于反射的序列化和字符串格式化带来的 CPU 与内存分配开销。
- zap 可以免费使用吗?用的什么许可证?
- zap 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
- zap 还在维护吗?
- 半年内有更新。zap 最近一次提交是在 2026年9月16日。
- zap 适合用来做什么?
- 对延迟敏感、需要控制内存分配的 Go 服务日志记录。 输出可被日志采集系统解析的 JSON 日志。 在后端服务中为请求附加结构化上下文字段。
- zap 怎么安装和运行?
- 使用 go get 安装 zap 库: go get -u go.uber.org/zap 创建生产环境日志记录器并使用 SugaredLogger 记录日志
- 在哪里获取 zap?
- 源代码和安装说明在 GitHub 上:https://github.com/uber-go/zap
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
面向 TypeScript 与 JavaScript 的通用日志库,支持美化终端输出、结构化 JSON、敏感信息脱敏,且无运行时依赖。
Go 语言的结构化日志库,与标准库 log 接口兼容,支持可插拔的格式化器和钩子,目前处于维护模式。
Python 日志库,用一个 logger 替代标准 logging 的繁琐配置,支持文件轮转、彩色输出和结构化日志。
面向 JavaScript 与 TypeScript 的零依赖日志库,支持 Deno、Node.js、Bun、浏览器和边缘函数。
统一的 TypeScript 日志库,通过同一套链式 API 把日志路由到 Pino、云服务、文件、StatsD 和 OpenTelemetry 等后端。