在编写 Web 应用程序的过程中,日志记录是非常重要的一个环节。它可以帮助你追踪应用程序的行为、调试错误,以及优化性能。在 Node.js 应用程序中,我们可以选择多种日志记录库来实现日志记录功能。其中,pino 是一款非常流行的轻量级日志记录库,它具有高性能、可扩展、易于使用等特点。本文将介绍如何在 Fastify 应用程序中使用 pino 日志记录,同时提供完整的代码示例。
准备工作
在开始之前,你需要先安装 Node.js 和 Fastify。可以通过以下命令来安装它们:
# 安装 Node.js $ wget https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz $ tar xf node-v14.16.0-linux-x64.tar.xz $ cd node-v14.16.0-linux-x64/bin $ export PATH=$PATH:$PWD # 安装 Fastify $ npm install fastify --save
使用 pino 记录日志
在 Fastify 应用程序中使用 pino 记录日志非常简单。首先,我们需要安装 pino 模块:
$ npm install pino --save
然后,在 Fastify 应用程序中引入 pino 模块,创建一个 logger 实例:
const fastify = require('fastify')(); const pino = require('pino'); const logger = pino({ name: 'myapp', level: 'info' }); fastify.get('/', (req, res) => { logger.info('hello world'); res.send({ message: 'hello world' }); }); fastify.listen(3000, err => { if (err) { logger.error(err); process.exit(1); } logger.info('server is listening on port 3000'); });
在上面的代码中,我们首先引入了 Fastify 和 pino 模块。然后,我们使用 pino.create() 方法创建了一个 logger 实例,并指定了它的名称和日志级别。接着,我们在路由处理函数中使用 logger 实例来记录日志。最后,我们使用 fastify.listen() 方法启动了 Fastify 应用程序,并在启动成功后记录了一条信息。
pino 支持多种日志级别:trace、debug、info、warn、error、fatal、silent。你可以根据自己的需要设置不同的日志级别。在默认情况下,pino 的日志级别为 info。
高级用法
除了基本的日志记录之外,pino 还提供了一些高级的用法,例如记录请求日志、格式化日志等。
记录请求日志
在实际的应用程序中,我们通常需要记录请求日志,以了解应用程序的运行情况。使用 pino,我们可以非常容易地记录请求日志。首先,我们需要安装 fastify-plugin 模块:
$ npm install fastify-plugin --save
然后,在 Fastify 应用程序中定义一个插件,用于记录请求日志:
const fastify = require('fastify')(); const pino = require('pino'); const fastifyPlugin = require('fastify-plugin'); const logger = pino({ name: 'myapp', level: 'info' }); fastify.register(fastifyPlugin((instance, opts, next) => { instance.addHook('onRequest', function (req, res, done) { logger.info({ method: req.method, url: req.url, headers: req.headers }); done(); }); next(); })); fastify.get('/', (req, res) => { res.send({ message: 'hello world' }); }); fastify.listen(3000, err => { if (err) { logger.error(err); process.exit(1); } logger.info('server is listening on port 3000'); });
在上面的代码中,我们首先引入了 Fastify、pino 和 fastify-plugin 模块。然后,我们使用 fastify.register() 方法注册了一个插件,该插件使用 addHook() 方法监听了 onRequest 事件,并在该事件被触发时记录了请求日志。最后,我们通过 fastify.get() 方法定义了一个路由处理函数。
格式化日志
默认情况下,pino 的日志记录格式是 JSON。如果你需要以其他格式输出日志,可以使用 pino-pretty 插件来进行格式化。首先,我们需要安装 pino-pretty 模块:
$ npm install pino-pretty --save-dev
然后,在启动应用程序时加上 --pretty
参数即可:
$ node app.js | pino-pretty
当你需要跟踪某些具体的日志信息时,你可以使用 pino-tee 插件来将日志输出到多个目标。例如,你可以同时将日志输出到文件和控制台:
$ node app.js | pino-tee --pretty --output file.log
总结
在本文中,我们介绍了如何在 Fastify 应用程序中使用 pino 日志记录库,并提供了完整的代码示例。除了基本的日志记录之外,pino 还提供了一些高级的用法,例如记录请求日志、格式化日志等。我相信,通过本文的学习和实践,你已经掌握了如何在 Fastify 应用程序中高效地使用 pino 进行日志记录的方法。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65adebe3add4f0e0ff779bf1