在 Go 里选日志框架,没有唯一“最好”,主要看你的项目规模、使用场景和可维护性要求。下面我按常见场景给你一个清晰的选择建议,并附上对比。
log/slog(Go 1.21+ 官方标准库)
✅ 首选
✅ 官方、无依赖、性能不错
✅ 结构化日志(JSON / Text)
✅ 支持 context、level、handler 扩展
go get log/slog
适合:
logrus
⚠️ 已进入维护模式(不再激进更新)
✅ 社区成熟、文档多
❌ 性能一般、API 偏旧
适合:
zerolog 或 zap
| 框架 | 特点 |
|---|---|
| zerolog | 很快、API 简洁、JSON 优先 |
| zap | Uber 出品、稳定、生态好 |
适合:
| 框架 | 官方 | 结构化 | 性能 | 生态 | 推荐指数 |
|---|---|---|---|---|---|
| log/slog | ✅ | ✅ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| zap | ❌ | ✅ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| zerolog | ❌ | ✅ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| logrus | ❌ | ⚠️ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| 标准库 log | ✅ | ❌ | ⭐ | ⭐ | ⭐ |
✅ 直接 slog
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
logger.Info("start server", "port", 8080)
✅ 自带:
✅ zerolog
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout})
log.Info().Str("user", "tom").Msg("login")
✅ 优点:
✅ zap
logger, _ := zap.NewProduction()
logger.Info("hello", zap.String("env", "prod"))
✅ 优点:
✅ log/slog 或 标准库 log
新项目?
├─ Go ≥ 1.21 → slog ✅
├─ 高性能 → zerolog / zap
├─ 老项目 → logrus
└─ 小工具 → log / slog
如果现在让我从零写 Go 服务:
✅ 首选:log/slog
✅ 极端性能场景:zerolog ✅ 企业老项目:zap / logrus
如果你愿意,可以告诉我:
我可以直接帮你 选定 + 给出最佳实践配置。