Go1.21.0标准库增加log/slog,结构化日志

在 Go1.21.0 开始,标准库提供了结构化日志包log/slog,这是社区讨论多年的问题,现在流行的开源日志库很多也很好用,在官方博客Structured Logging with slog 也说明了,此举并不是要排挤开源日志库,而是为了简化依赖

由于有许多结构化日志包可供选择,大型程序通常会通过其依赖项包含多个日志包。主程序可能必须配置这些日志包中的每一个,以便日志输出保持一致:它都以相同的格式到达同一个地方。通过在标准库中包含结构化日志,我们可以提供一个所有其他结构化日志包可以共享的通用框架。

slog也是广泛吸取了各开源日志库的优点,在使用过程中会感觉很熟悉,说实话一个编程语言最好只有一个最受欢迎的日志库,这样你就不用纠结该使用哪个,而且各个库的使用方法也不一样,说实话心智负担过重,如果能统一就更好,各个框架或项目使用同样的日志库这是最理想的。

func logInfo() {
	// 2024/12/23 09:55:19 INFO hello, world name=Alice age=25
	slog.Info("hello, world", "name", "Alice", "age", 25)
	
	l := slog.Default()
	// 2024/12/23 09:55:19 INFO hello, world name=Alice age=25
	l.Info("hello, world", "name", "Alice", "age", 25)

	textLogger := slog.New(slog.NewTextHandler(os.Stdout, nil))
	// time=2024-12-23T09:55:19.440+08:00 level=INFO msg="hello, world" name=Alice age=25
	textLogger.Info("hello, world", "name", "Alice", "age", 25)

	jsonLogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
	// {"time":"2024-12-23T09:55:19.4403599+08:00","level":"INFO","msg":"hello, world","name":"Alice","age":25}
	jsonLogger.Info("hello, world", "name", "Alice", "age", 25)

	// {"time":"2024-12-23T09:55:19.440883+08:00","level":"WARN","msg":"hello, world","name":"Alice","age":25}
	jsonLogger.LogAttrs(context.Background(), slog.LevelWarn, "hello, world", slog.String("name", "Alice"), slog.Int("age", 25))

	jsonLogger = jsonLogger.With("name", "Alice", "age", 25)
	// {"time":"2024-12-23T09:55:19.440883+08:00","level":"ERROR","msg":"hello, world","name":"Alice","age":25}
	jsonLogger.Error("hello, world")
}

接口文档:https://pkg.go.dev/log/slog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值