使用 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官方网。
原文地址: