如何全面掌握Go语言中使用slog库进行日志记录的入门知识?
摘要:简介 slog 是 Go 1.21 引入的官方结构化日志库(Structured Logging)。它结束了 Go 标准库只有简单 log 包的历史,让我们可以直接输出 JSON 或 Key-Value 格式的日志,非常适合对接 ELK、G
简介
slog 是 Go 1.21 引入的官方结构化日志库(Structured Logging)。它结束了 Go 标准库只有简单 log 包的历史,让我们可以直接输出 JSON 或 Key-Value 格式的日志,非常适合对接 ELK、Grafana Loki 等日志分析系统。
相较于第三方日志库如 zap、logrus,slog 的优势在于:
零依赖:作为标准库的一部分,无需引入第三方依赖
官方维护:长期稳定,API 变更有 Go 兼容性承诺保障
接口简洁:API 设计清晰,学习成本低
可扩展:通过自定义 Handler 可以实现各种定制需求
基本使用
slog 用起来非常简单。默认输出到标准错误流(os.Stderr),格式为普通文本。
package main
import (
"fmt"
"log/slog"
)
func main() {
slog.Debug("Hello world")
slog.Info("Hello world")
slog.Warn("Hello world")
slog.Error("Hello world")
slog.Info("this is a message", "name", "zhangsan")
age := 8
slog.Warn(fmt.Sprintf("这是 %d 岁?", age))
}
运行输出:
$ go run main.go
2026/02/15 11:52:24 INFO Hello world
2026/02/15 11:52:24 WARN Hello world
2026/02/15 11:52:24 ERROR Hello world
2026/02/15 11:52:24 INFO this is a message name=zhangsan
2026/02/15 11:52:24 WARN 这是 8 岁?
注意:默认的 slog logger 日志级别为 INFO,因此 Debug 级别的日志不会输出。
日志级别
slog 定义了四个日志级别,从低到高依次为:
级别
常量
说明
DEBUG
slog.LevelDebug
调试信息,开发环境使用
INFO
slog.LevelInfo
常规信息
WARN
slog.LevelWarn
警告信息
ERROR
slog.LevelError
错误信息
输出 JSON 格式
slog 可以输出 JSON 格式,便于与 ELK、Grafana Loki 等日志系统集成。
