log
目录
log
日志在程序中发挥着重要作用,因为它们是在出现问题时你可以检查的信息源。 通常,发生错误时,最终用户只会看到一条消息,指示程序出现问题。 从开发人员的角度来看,我们需要简单错误消息以外的更多信息。 这主要是因为我们想要再现该问题以编写适当的修补程序。 在本模块中,你将学习日志记录在 Go 中的工作原理。 你还将学习一些应始终实现的做法。
1 log 包
对于初学者,Go 提供了一个用于处理日志的简单标准包。 可以像使用 fmt 包一样使用此包。 该标准包不提供日志级别,且不允许为每个包配置单独的记录器。 如果需要编写更复杂的日志记录配置,可以使用记录框架执行此操作。 稍后我们将介绍记录框架。
import (
"log"
)
func main() {
log.Print("Hey, I'm a log!")
}
2020/12/19 13:39:17 Hey, I'm a log!
默认情况下,log.Print() 函数将日期和时间添加为日志消息的前缀。 你可以通过使用 fmt.Print() 获得相同的行为,但使用 log 包还能执行其他操作,例如将日志发送到文件。 稍后我们将详细介绍 log 包功能。
你可以使用 log.Fatal() 函数记录错误并结束程序,就像使用 os.Exit(1) 一样。 使用以下代码片段试一试:
package main
import (
"fmt"
"log"
)
func main() {
log.Fatal("Hey, I'm an error log!")
fmt.Print("Can you see me?")
}
2 记录到文件
func main() {
file, err := os.OpenFile("info.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
log.SetOutput(file)
log.Print("Hey, I'm a log!")
}
3 log 框架
最后,可能有 log 包中的函数不足以处理问题的情况。 你可能会发现,使用记录框架而不编写自己的库很有用。 Go 的几个记录框架有 Logrus、zerolog、zap 和 Apex。
log 输出格式: 在集中位置运行搜索时,JSON 是一种有用的日志格式。