在前端开发中,记录应用程序的日志非常重要,它可以帮助我们识别错误发生的位置,解决掉从而不断完善应用程序。在 Node.js 中,Pino 是一种高效的日志记录器,它的性能远高于其他日志记录库。在 Fastify 中,我们可以很容易地使用Pino来实现请求日志记录。
安装 Pino 和日志相关组件
在开始使用 Pino 之前,首先需要安装 Pino 和一些日志相关组件。
npm install fastify-pino pino pino-pretty
其中 fastify-pino
是 Fastify 组件,用于将 Pino 与 Fastify 集成。pino-pretty
用于美化输出的日志,使日志更易读。
集成 Pino
集成 Pino 是非常简单的。在 Fastify 应用程序的根目录下,添加以下代码:
const fastify = require('fastify')({ logger: true }) fastify.register(require('fastify-pino'), {})
在这个代码块中,fastify-pino
模块已经注册到 Fastify 应用程序中了。logger: true
的选项开启 Fastify 的日志记录功能,fastify-pino
将默认使用该日志记录器。
日志输出
使用这些配置后,Fastify 将自动记录请求并使用 Pino 将日志输出到控制台。连续的请求日志记录将被分割为单独条目,在控制台输出时将成为单独的行,因此具有更高的可读性。
以下是一个输出的示例:
[2021-11-01T03:46:31.350Z] INFO (48281 on Macbook-Air): Server listening at http://localhost:3000 [2021-11-01T03:46:42.012Z] INFO (48299 on Macbook-Air): incoming request [2021-11-01T03:46:42.027Z] INFO (48299 on Macbook-Air): request completed [2021-11-01T03:46:43.002Z] INFO (48299 on Macbook-Air): incoming request [2021-11-01T03:46:43.012Z] INFO (48299 on Macbook-Air): request completed
上述输出显示了两个请求的日志记录,日志可以简单进行扩展,通过添加自定的数据到日志对象中。假设你想要记录请求的响应时间,可以添加一个处理程序并使用 JavaScript 的高速工具类:
const start = process.hrtime() fastify.get('/', (req, res) => { res.send({ hello: 'world' }) const [seconds, nanos] = process.hrtime(start) req.log.info({ responseTime: seconds * 1e9 + nanos }, 'done') })
在上面的代码中,res.send
操作后的代码会计算执行的时间,并将数据添加到日志对象中,这个日志对象会在请求完成时自动展开到控制台输出日志内容。截至这时,你的 Fastify 应用程序就可以记录所需信息的请求日志。
日志记录器的操作
为了更好地掌握日志记录器的操作方法,我们来看一个完整的 register
操作。
fastify.register(require('fastify-pino'), { prettyPrint: true })
在这个示例中,我们在注册 fastify-pino
插件时,将 prettyPrint
设置为 true
。这意味着每条日志记录对象都会在输入到日志记录器时被美化,使日志更易于阅读。以下代码演示了如何访问 Fastify 的默认日志记录器:
fastify.get('/', (req, reply) => { req.log.info('Some example log') reply.send('OK') })
在这个示例中,我们使用 info
方法记录会话信息。预定义的日志记录方法有 6 种,全部作用如下:
trace(msg, ...args)
– 对应trace
级别debug(msg, ...args)
– 对应debug
级别info(msg, ...args)
– 对应info
级别warn(msg, ...args)
– 对应warn
级别error(msg, ...args)
– 对应error
级别fatal(msg, ...args)
– 对应fatal
级别
注意事项
在使用 Fastify 和 Pino 记录日志时,有一些需要注意的问题:
- 由于 Pino 日志记录器确实拥有出色的性能指标,它成为越来越流行的选择之一。但是,如果当程序运行在大规模的服务器集群中时,Pino 的性能并不能带来很大的好处,并且开销可能会增加。
- 另一个问题是,在使用 Pino 记录日志时,日志对象的构造方式可能会影响性能。为了减少性能损耗,应尽量避免在日志对象的构造过程中进行太多的符号字面量处理操作。
结论
以上就是使用 Fastify 和 Pino 记录请求日志的整个过程。通过使用 Pino 记录日志,可以提高应用程序的性能,并轻松地跟踪所有请求的生命周期。对于前端开发者来说,这是一个有价值的工具和技能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/673595670bc820c5824f4439