前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Go程序例子(76):日志记录

Go程序例子(76):日志记录

原创
作者头像
用户11078756
发布2025-01-20 14:15:51
发布2025-01-20 14:15:51
5900
代码可运行
举报
文章被收录于专栏:go程序例子go程序例子
运行总次数:0
代码可运行

Go 标准库提供了简单的工具来从 Go 程序中输出日志,其中 log 包用于自由格式的输出,而 log/slog 包用于结构化输出。

代码语言:go
复制
package main

import (
    "bytes"
    "fmt"
    "log"
    "os"

    "log/slog"
)

func main() {
		// 简单地调用 log 包中的 Println 等函数会使用标准日志记录器,它已经预先配置为将合理的日志输出到 os.Stderr。像 Fatal* 或 Panic* 这样的附加方法会在记录日志后退出程序。
    log.Println("standard logger")
		// 可以通过设置标志来配置日志记录器的输出格式。默认情况下,标准日志记录器设置了 log.Ldate 和 log.Ltime 标志,这些标志被收集在 log.LstdFlags 中。例如,我们可以更改其标志以发出微秒精度的时间。
    log.SetFlags(log.LstdFlags | log.Lmicroseconds)
    log.Println("with micro")
		// 它还支持发出调用日志函数的文件名和行号。
    log.SetFlags(log.LstdFlags | log.Lshortfile)
    log.Println("with file/line")
		// 创建一个自定义日志记录器并传递它可能很有用。在创建新日志记录器时,我们可以设置一个前缀以将其输出与其他日志记录器区分开来。
    mylog := log.New(os.Stdout, "my:", log.LstdFlags)
    mylog.Println("from mylog")
		// 我们可以使用 SetPrefix 方法为现有的日志记录器(包括标准日志记录器)设置前缀。
    mylog.SetPrefix("ohmy:")
    mylog.Println("from mylog")
		// 日志记录器可以具有自定义的输出目标;任何 io.Writer 都可以使用。
    var buf bytes.Buffer
    buflog := log.New(&buf, "buf:", log.LstdFlags)
		// 此调用将日志输出写入 buf。
    buflog.Println("hello")
		// 这实际上会在标准输出上显示它。
    fmt.Print("from buflog:", buf.String())
		// slog 包提供了结构化的日志输出。例如,以 JSON 格式记录日志非常简单。
    jsonHandler := slog.NewJSONHandler(os.Stderr, nil)
    myslog := slog.New(jsonHandler)
    myslog.Info("hi there")
		// 除了消息外,slog 输出还可以包含任意数量的 key=value 对。
    myslog.Info("hello again", "key", "val", "age", 25)
}

运行结果:

代码语言:javascript
代码运行次数:0
复制
➜ go run logging.go                   
2025/01/20 14:14:03 standard logger
2025/01/20 14:14:03.298758 with micro
2025/01/20 14:14:03 logging.go:19: with file/line
my:2025/01/20 14:14:03 from mylog
ohmy:2025/01/20 14:14:03 from mylog
from buflog:buf:2025/01/20 14:14:03 hello
{"time":"2025-01-20T14:14:03.298799+08:00","level":"INFO","msg":"hi there"}
{"time":"2025-01-20T14:14:03.298807+08:00","level":"INFO","msg":"hello again","key":"val","age":25}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档