当前位置:首页 > Go > 正文

Go语言日志输出详解(slog包使用与日志目标配置全攻略)

在 Go 语言中,日志记录是开发和调试过程中不可或缺的一环。从 Go 1.21 版本开始,官方推出了全新的 log/slog 包,它提供了结构化日志、上下文支持以及灵活的日志输出目标配置能力。

本文将手把手教你如何使用 Go语言日志输出 功能,重点讲解 slog包使用 中如何配置不同的 日志目标配置,即使是编程小白也能轻松上手!

什么是 log/slog?

log/slog 是 Go 官方提供的结构化日志库,相比传统的 log 包,它支持键值对日志、不同日志级别(如 Info、Warn、Error)、自定义 Handler(处理器)等高级特性。

Go语言日志输出详解(slog包使用与日志目标配置全攻略) Go语言日志输出 slog包使用 日志目标配置 Go slog教程 第1张

默认日志输出目标

如果不做任何配置,slog 默认会将日志输出到标准错误(os.Stderr),格式为文本形式。例如:

package mainimport (	"log/slog")func main() {	slog.Info("这是一条信息日志")}

运行后,终端会输出类似:

2024/06/15 10:30:45 INFO 这是一条信息日志

自定义日志输出目标

在实际项目中,我们常常需要将日志写入文件、发送到网络服务,或者同时输出到多个地方。这时就需要自定义 日志目标配置

1. 输出到文件

下面的代码演示如何将日志写入本地文件 app.log

package mainimport (	"log/slog"	"os")func main() {	// 打开或创建日志文件	file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)	if err != nil {		panic(err)	}	defer file.Close()	// 创建一个新的 Logger,指定输出到文件	logger := slog.New(slog.NewTextHandler(file, nil))	// 使用自定义 logger	logger.Info("日志已写入文件!")}

2. 同时输出到控制台和文件(多目标)

有时我们需要既在控制台看到日志,又保存一份到文件。可以通过自定义 Handler 实现,但更简单的方式是使用 io.MultiWriter

package mainimport (	"io"	"log/slog"	"os")func main() {	file, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)	defer file.Close()	// 同时写入标准输出和文件	multi := io.MultiWriter(os.Stdout, file)	logger := slog.New(slog.NewTextHandler(multi, nil))	logger.Info("这条日志会同时出现在控制台和文件中!")}

3. 使用 JSON 格式输出

在微服务或云环境中,JSON 格式更便于日志收集系统(如 ELK、Loki)解析。只需将 NewTextHandler 替换为 NewJSONHandler

logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))logger.Info("这是 JSON 格式的日志", "user_id", 123, "action", "login")

输出结果:

{"time":"2024-06-15T10:35:00.123456789Z","level":"INFO","msg":"这是 JSON 格式的日志","user_id":123,"action":"login"}

设置全局默认 Logger

如果你希望整个程序都使用同一个日志配置,可以调用 slog.SetDefault 设置全局默认 Logger:

// 设置全局 loggerslog.SetDefault(slog.New(slog.NewJSONHandler(file, nil)))// 之后直接使用 slog.Info 即可slog.Info("使用全局配置的日志")

总结

通过本文,你已经掌握了 Go slog教程 中最核心的部分:如何灵活配置日志的输出目标。无论是输出到文件、控制台,还是使用 JSON 格式,log/slog 都提供了简洁而强大的 API。

记住,良好的日志实践能极大提升系统可观测性和故障排查效率。现在就去你的 Go 项目中试试这些技巧吧!

关键词回顾:Go语言日志输出、slog包使用、日志目标配置、Go slog教程。