使用 Uber Zap 在应用中记录日志

Go

去年我开始使用 Golang,主要用 net/http 包构建 REST API。从那时起,我一直在使用 Go 来构建许多类型的应用程序,用过几个不同的包,但是在常用的当数 Uber Zap 包。

我发现 Zap 非常易于使用和安装。支持很多特性,比如 “ReplaceGlobals” 函数、并发安全和 “CapitalColorLevelEncoder”。但是Zap最重要的一点是它很快。

Go

表格来自 https://github.com/uber-go/zap

因此,今天我将向您展示如何设置一个超级基本的 Zap 配置,以便您可以在下一个 Go 应用程序中使用 Zap。

首先,创建一个日志目录,用以放置所有的日志文件:

Go

在此之前,我们需要知道应用程序在哪里运行。函数 os.Getwd() 为我们实现了这一点。接下来,我们使用 fmt.Sprintf() 创建日志文件夹的文件路径,它返回一个格式化的字符串。最后,我们检查文件夹是否存在,并创建其他文件夹。

接下来,我们将实现一个 WriterSync 接口,它是一个可以刷新缓冲数据的 io.Writer。因为我们要写入日志到一个文件,所以我们要使用os.file,它是 WriterSync的实现。

Go

在这里,我们将文件路径应用于应用程序正在运行的环境路径,然后调用「os.openfile()」。由于我们使用标志由于我们使用了「O_APPEND」和「O_CREATE」标志,如果文件存在,它只会在文件内容之后写入,否则会创建一个新的。

现在,我们将设置编码器配置。这将定义Zap如何打印收到的信息。有几种方法可以这样做,基于您的用例更改。我今天只能展示一个。

Go

第一个函数为生产环境返回一个自用的 EncoderConfig,其中已经配置了几个字段。 我们将只更改两个,「EncodeTime」为 UTC,EncodeLevel 为「CapitalColorLevelEncoder」。 后者以所有大写字母打印日志级别,并根据级别着色。

上面的配置将以这种格式打印一些内容:

| 2021–01–05T17:37:05Z INFO example/main.go:15 Starting the server…

最后,这一步是创建将在应用程序启动时首先调用的函数。

Go

首先,我们根据之前设置的配置创建一个新的 「Core」 — 这是一个最小的、快速的记录器接口。 然后, 「zap.New()」 根据提供的核心和选项构造一个新的记录器。 唯一的选项集是 「zap.AddCaller()」, 它将记录器配置为使用文件名、行号和函数名注释每条消息。

最后, 我们设置 「zap.ReplaceGlobals()」 以替换默认记录器和 SugaredLogger。

从现在起,我们可以从应用程序中的任何位置调用记录器或SugaredLogger。

最后,让我们谈谈日志优先级。有 7 个优先级,它们是:

DebugLevel:通常只出现在开发环境中。
InfoLevel:默认日志优先级。
WarnLevel:比 InfoLevel 更重要,但仍然不需要个人的关注。
ErrorLevel:这些是高优先级,不应出现在应用程序中。
DPanicLevel:这些是特别重要的错误,在开发环境中logger会panic。
PanicLevel:记录一条消息,然后panic。
FatalLevel:记录一条消息,然后调用 os.Exit(1)。

Go
调用 SugaredLogger 的示例

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/@gustavo.nabakseixas/...

译文地址:https://learnku.com/go/t/62572

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!