Logging in Go with Slog: A Practitioner's Guide
8 months ago
- #Structured-Logging
- #Go
- #Logging
- Go 1.21 引入了原生结构化日志解决方案 `log/slog`
- `slog` 围绕三个核心类型构建:`Logger`、`Handler` 和 `Record`
- `Logger` 提供 `Info()`、`Debug()` 和 `Error()` 等方法
- `Handler` 处理 `Record` 并决定日志输出格式与目标
- `Record` 包含时间、严重级别、消息和属性等日志事件详情
- `slog` 通过 `slog.Attr` 支持带上下文的结构化键值对日志
- `sloglint` 等检查工具可强制执行日志规范的最佳实践
- `slog` 提供四个严重级别:`DEBUG`、`INFO`、`WARN` 和 `ERROR`
- 可通过 `ReplaceAttr` 创建并映射自定义日志级别
- 内置处理器包含 `JSONHandler` 和 `TextHandler` 以支持不同输出格式
- 第三方处理器通过采样、着色等功能扩展能力
- 上下文日志模式包括全局记录器、上下文嵌入记录器和显式传递
- `LogValuer` 接口控制自定义类型在日志中的呈现形式
- 错误日志可通过结构化上下文和调用栈跟踪增强
- `slog` 性能虽慢于 `zerolog` 和 `zap`,但针对常见场景优化
- 集中式可观测性管道可接收 `slog` 日志并与追踪指标关联