替代Zap,Go语言官方实现的结构化日志包
创始人
2025-07-12 06:51:23
0

在 Go 1.21 中,引入了一个新的 log 包 -- log/slog,这是一个强大的日志记录库,提供了许多用于帮助开发人员更加有效地记录、管理和理解日志的工具。无论你是一个初级还是高级的 Go 开发人员,理解和掌控 go 的日志系统是非常有用的。接下来,让我们深入研究一下 Go 中的日志行为,并通过实例来详细理解每个主要功能。

安装

在 Go 1.21 中,log/slog 是系统自带的,无需安装。只需在代码顶部加上 import "log/slog" 即可使用。

package main

import "log/slog"

初始化

在 Go 1.21 的标准库中,log/slog 的初始化非常直观。以下是一个简单初始化示例:

package main

import "log/slog"

func main() {
    log := slog.New()
}

这将创建一个新的公共日志记录器,此记录器具有默认的日志级别(ERROR),但您可以使用 SetLevel 方法来修改这个级别。

设置日志级别

log/slog 提供了设置日志级别的方法。包括:DEBUG,INFO,WARNING,ERROR,FATAL。以下为设置日志级别的示例:

package main

import "log/slog"

func main() {
    log := slog.New()
    log.SetLevel(slog.DEBUG)
}

在这里,我们把默认的日志级别从 ERROR 设置为 DEBUG。

日志输出

package main

import "log/slog"

func main() {
    log := slog.New()
    log.SetLevel(slog.DEBUG)

    log.Debug("this is a debug message")
    log.Info("this is an info message")
    log.Warning("this is a warning message")
    log.Error("this is an error message")
}

以上代码,我们会看到所有的信息都会被打印出来。因为我们把日志等级设置成了 DEBUG, 这是最低级别的,所以所有的日志信息都会被打印出来。

自定义日志格式

log/slog 提供了 Formatter 接口,允许你自定义日志的格式。你可以通过实现这个接口,创建自己的 Formatter。

package main

import (
    "log/slog"
    "os"
    "time"
)

type MyFormatter struct{}

func (f *MyFormatter) Format(entry *slog.Entry) ([]byte, error) {
    return []byte(fmt.Sprintf("%s [%s] %s\n", entry.Time.Format(time.RFC3339), entry.Level.String(), entry.Message), nil
}

func main() {
    log := slog.New()

    log.SetFormatter(&MyFormatter{})
    log.SetLevel(slog.DEBUG)
    log.SetOutput(os.Stdout)

    log.Debug("this is a debug message")
    log.Info("this is an info message")
    log.Warning("this is a warning message")
    log.Error("this is an error message")
}

以上是自定义日志格式的示例,我们创建了一个新的 Formatter, 将日志格式设置为 [时间] [级别] 信息。

结语

以上就是 Go 1.21 标准库 log/slog 的基本介绍和使用方法。希望这篇文章能帮助你更好地理解和使用 Go 的日志系统,高效地处理你的日志任务。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...