Go程序例子(76):日志记录
Go程序例子(76):日志记录
Go 标准库提供了简单的工具来从 Go 程序中输出日志,其中 log 包用于自由格式的输出,而 log/slog 包用于结构化输出。代码语言:go复制package main
import (
"bytes"
"fmt"
"log"
"os"
Go程序例子(76):日志记录
Go 标准库提供了简单的工具来从 Go 程序中输出日志,其中 log
包用于自由格式的输出,而 log/slog
包用于结构化输出。
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 := (os.Stdout, "my:", log.LstdFlags)
mylog.Println("from mylog")
// 我们可以使用 SetPrefix 方法为现有的日志记录器(包括标准日志记录器)设置前缀。
mylog.SetPrefix("ohmy:")
mylog.Println("from mylog")
// 日志记录器可以具有自定义的输出目标;任何 io.Writer 都可以使用。
var buf bytes.Buffer
buflog := (&buf, "buf:", log.LstdFlags)
// 此调用将日志输出写入 buf。
buflog.Println("hello")
// 这实际上会在标准输出上显示它。
fmt.Print("from buflog:", buf.String())
// slog 包提供了结构化的日志输出。例如,以 JSO 格式记录日志非常简单。
jsonHandler := sJSOHandler(os.Stderr, nil)
myslog := s(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:0 standard logger
2025/01/20 14:14:0.298758 with micro
2025/01/20 14:14:0 logging.go:19: with file/line
my:2025/01/20 14:14:0 from mylog
ohmy:2025/01/20 14:14:0 from mylog
from buflog:buf:2025/01/20 14:14:0 hello
{"time":"2025-01-20T14:14:0.298799+08:00","level":"IFO","msg":"hi there"}
{"time":"2025-01-20T14:14:0.298807+08:00","level":"IFO","msg":"hello again","key":"val","age":25}
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-21 01:43:34
推荐阅读
留言与评论(共有 11 条评论) |
本站网友 格列吡嗪 | 5分钟前 发表 |
2025/01/20 14 | |
本站网友 黄豆酱的功效与作用 | 26分钟前 发表 |
with file/line my | |
本站网友 法莫替丁 | 28分钟前 发表 |
例如 | |
本站网友 癫痫能治愈吗 | 27分钟前 发表 |
14 | |
本站网友 创业资金 | 23分钟前 发表 |
"age" | |
本站网友 天津取消限购 | 20分钟前 发表 |
= (&buf | |
本站网友 进口凯迪拉克 | 13分钟前 发表 |
我们可以更改其标志以发出微秒精度的时间 | |
本站网友 三高人群食谱 | 16分钟前 发表 |
0.298758 with micro 2025/01/20 14 | |
本站网友 l619 | 2秒前 发表 |
"2025-01-20T14 | |
本站网友 夏季如何快速减肥 | 2分钟前 发表 |
标准日志记录器设置了 log.Ldate 和 log.Ltime 标志 |