Golang Slog日志库使用指南
最近在学习Golang的slog日志库,但在实际使用中遇到几个问题:1)如何配置slog输出JSON格式的日志?2)slog支持哪些日志级别,如何自定义日志级别?3)怎样为slog添加自定义的日志字段?4)slog的性能如何,在高并发场景下需要注意什么?5)能否结合zerolog或zap使用?希望有经验的朋友能分享一下最佳实践。
2 回复
Golang slog是Go 1.21引入的结构化日志库。使用步骤:
- 导入
log/slog - 创建Logger:
slog.New(slog.NewTextHandler(os.Stdout, nil)) - 记录日志:
slog.Info("消息", "key", "value")
支持级别(Debug/Info/Warn/Error)和结构化输出,可自定义Handler处理不同格式和输出目标。
更多关于Golang Slog日志库使用指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang Slog 日志库使用指南
log/slog 是 Go 1.21 引入的结构化日志库,提供高性能的键值对日志记录。
基本使用
package main
import (
"log/slog"
"os"
)
func main() {
// 默认文本格式输出到标准错误
logger := slog.New(slog.NewTextHandler(os.Stderr, nil))
// 记录结构化日志
logger.Info("用户登录",
"user_id", 123,
"ip", "192.168.1.100",
"success", true)
// 使用 With 添加公共字段
userLogger := logger.With("user_id", 123)
userLogger.Warn("操作失败", "action", "update_profile")
}
配置选项
// JSON 格式输出
logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelDebug, // 设置日志级别
AddSource: true, // 添加源文件信息
}))
// 自定义级别
logger.Debug("调试信息")
logger.Info("普通信息")
logger.Warn("警告信息")
logger.Error("错误信息")
高级特性
// 使用 Attr 提高性能
logger.Info("用户操作",
slog.Int("user_id", 123),
slog.String("action", "purchase"),
slog.Group("order",
slog.String("id", "ORD-001"),
slog.Float64("amount", 99.99)))
// 自定义日志级别
const LevelTrace = slog.Level(-8)
logger.Log(nil, LevelTrace, "跟踪信息")
全局设置
// 设置默认 logger
slog.SetDefault(logger)
// 全局使用
slog.Info("全局日志记录", "service", "api")
最佳实践
- 性能考虑:使用
slog.Attr而非键值对参数 - 错误处理:结合
error类型记录错误 - 上下文:使用
context传递请求相关字段 - 级别管理:生产环境使用
LevelInfo或更高
func handleRequest(ctx context.Context, userID int) {
logger := slog.Default().With(
"request_id", ctx.Value("request_id"),
"user_id", userID,
)
logger.Info("请求处理开始")
defer logger.Info("请求处理结束")
}
slog 提供了比标准库更强大的结构化日志功能,适合现代应用开发需求。

