log/slog (Go 1.21+) — стандартный пакет для структурированного логирования.
import "log/slog"
// Текстовый формат (для разработки)
slog.Info("user created",
"user_id", 42,
"email", "john@example.com",
)
// time=2024-01-15T10:30:00Z level=INFO msg="user created" user_id=42 email=john@example.com
// JSON формат (для production)
logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelInfo,
}))
slog.SetDefault(logger)
Группировка и контекст:
// Logger с постоянными полями
logger := slog.With("service", "auth", "version", "1.2")
logger.Info("started") // всегда будет service=auth
// Группы
slog.Info("request",
slog.Group("user", "id", 42, "role", "admin"),
)
// ... user.id=42 user.role=admin
Уровни: Debug, Info, Warn, Error. Можно создать свой Handler для кастомного формата.