slog 处理器
文本和 JSON 处理器
slog 处理器 是 CoddyKit 上的免费 Go Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
处理程序决定格式
在 slog 中,日志记录器会调用 Handler 来格式化并写入每条记录。更换处理程序即可改变输出格式,而无需改动日志调用。
TextHandler
slog.NewTextHandler 会写出便于人类阅读的 key=value 行。它适合本地开发和终端环境。
package main
import (
"log/slog"
"os"
)
func main() {
h := slog.NewTextHandler(os.Stdout, nil)
logger := slog.New(h)
logger.Info("hello", "env", "dev")
}JSONHandler
slog.NewJSONHandler 会在每一行输出一个 JSON 对象。它非常适合生产环境中的日志流水线。
package main
import (
"log/slog"
"os"
)
func main() {
h := slog.NewJSONHandler(os.Stdout, nil)
logger := slog.New(h)
logger.Info("hello", "env", "prod")
}创建日志记录器
slog.New(handler) 会将一个处理程序封装到日志记录器中。您可以在该实例上调用 logger.Info、logger.Error 等方法。
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))HandlerOptions
处理程序构造函数的第二个参数是 *slog.HandlerOptions。传入 nil 使用默认设置,或者配置日志级别和源代码位置。
opts := &slog.HandlerOptions{
Level: slog.LevelDebug,
AddSource: true,
}
h := slog.NewJSONHandler(os.Stdout, opts)写入文件或缓冲区
处理程序可以接收任意 io.Writer。您可以将日志写入文件、用于测试的缓冲区或标准输出。这种解耦是 slog 的一个关键设计点。
f, _ := os.Create("app.log")
logger := slog.New(slog.NewJSONHandler(f, nil))设置默认日志记录器
slog.SetDefault(logger) 会让包级函数(例如 slog.Info)使用您的处理程序。在启动时设置一次即可。
slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil)))
slog.Info("now JSON by default")文本与 JSON 输出
相同的调用,两种格式:
- 文本:
time=... level=INFO msg=hello env=dev - JSON:
{"time":"...","level":"INFO","msg":"hello","env":"dev"}
选择处理程序
经验法则:
- 本地/开发环境:TextHandler(易读)
- 生产环境/集中聚合:JSONHandler(易于解析)
通过环境变量做出选择,让同一个二进制程序能够适应不同环境。
编写可复用的配置
集中创建日志记录器,让整个应用共享一份配置。
func newLogger(prod bool) *slog.Logger {
if prod {
return slog.New(slog.NewJSONHandler(os.Stdout, nil))
}
return slog.New(slog.NewTextHandler(os.Stdout, nil))
}可运行:切换处理程序
这个程序会通过两个处理程序记录同一个事件,方便您比较它们的格式。
package main
import (
"log/slog"
"os"
)
func main() {
text := slog.New(slog.NewTextHandler(os.Stdout, nil))
js := slog.New(slog.NewJSONHandler(os.Stdout, nil))
text.Info("login", "user", "ada")
js.Info("login", "user", "ada")
}快速检查
请测试您对 slog 处理程序的理解。
回顾
您已了解 slog 处理程序:
- 处理程序负责格式化和写入记录;日志记录器会调用它们
NewTextHandler面向人类,NewJSONHandler面向机器- 处理程序接受任意
io.Writer和*HandlerOptions slog.SetDefault会连接包级函数
常见问题解答
「slog 处理器」课时是免费的吗?
是的 — 「slog 处理器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「slog 处理器」这节课中我会学到什么?
文本和 JSON 处理器 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「slog 处理器」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 为什么使用结构化日志
- slog 处理器
- 日志级别与属性
- 自定义处理器