# go日志记录解决方案

# 简单桌面应用日志解决方案

slog package - log/slog - Go Packages (opens new window)

slog 是 Go 语言官方标准库中的一个包,全称是 log/slog。它从 Go 1.21 版本(2023年8月发布)开始引入,旨在为 Go 程序提供一个高性能、结构化、分级别的现代日志解决方案

简单来说,你可以把它理解为 官方版的“结构化日志库”,类似于第三方库 logruszap,但具有以下特点:

slog 的核心特点

  1. 结构化日志 日志不再是单纯的字符串,而是包含键值对字段,便于机器解析和检索。 例如:slog.Info("user login", "uid", 12345, "ip", "192.168.1.1") 输出可以是 JSON 格式:{"time":"...","level":"INFO","msg":"user login","uid":12345,"ip":"192.168.1.1"}
  2. 日志级别 内置 DebugInfoWarnError 四个级别,可通过 HandlerOptions 灵活控制输出级别。
  3. 高性能 设计上避免了反射和大量内存分配,性能远高于 logrus,接近 zap
  4. 上下文支持 提供了 InfoContextDebugContext 等方法,可以将 context.Context 中的信息(如 trace_id)自动注入日志。
  5. 可扩展的 Handler 接口 你可以自定义日志的输出格式、目标(文件、网络等)、过滤规则等,无需修改业务代码。
  6. 标准库,零依赖 一旦你的 Go 版本 >= 1.21,直接 import log/slog 即可使用,不需要引入任何第三方库

对比传统 log

特性 标准库 log log/slog
日志级别 无,只有 Print/Fatal/Panic 明确的 Debug/Info/Warn/Error
结构化 不支持,只能拼接字符串 原生支持键值对字段
性能 一般 更高(尤其是结构化场景)
扩展性 只能通过 SetOutput 改变输出 可通过实现 Handler 接口任意定制

典型使用场景

  • 后台服务 / API 开发:需要结构化日志便于 ELK、Loki 等日志系统收集。
  • 桌面应用:需要本地文件轮转、级别控制。
  • CLI 工具:简单的带级别日志输出。
Last Updated: 6/3/2026, 4:53:54 AM