使用 uber zap 在应用中记录日志 | go优质外文翻译 | go 技术论坛-金年会app官方网

去年我开始使用 golang,主要用 net/http 包构建 rest api。从那时起,我一直在使用 go 来构建许多类型的应用程序,用过几个不同的包,但是在常用的当数 uber zap 包。

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

表格来自 

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

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

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

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

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

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

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

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

| 2021–01–05t17:37:05z info example/main.go:15 starting the server…

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

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

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

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

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

debuglevel:通常只出现在开发环境中。
infolevel:默认日志优先级。
warnlevel:比 infolevel 更重要,但仍然不需要个人的关注。
errorlevel:这些是高优先级,不应出现在应用程序中。
dpaniclevel:这些是特别重要的错误,在开发环境中logger会panic。
paniclevel:记录一条消息,然后panic。
fatallevel:记录一条消息,然后调用 os.exit(1)。


调用 sugaredlogger 的示例

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

原文地址:

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

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

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