在 Fastify 应用程序中使用 pino 日志记录

在编写 Web 应用程序的过程中,日志记录是非常重要的一个环节。它可以帮助你追踪应用程序的行为、调试错误,以及优化性能。在 Node.js 应用程序中,我们可以选择多种日志记录库来实现日志记录功能。其中,pino 是一款非常流行的轻量级日志记录库,它具有高性能、可扩展、易于使用等特点。本文将介绍如何在 Fastify 应用程序中使用 pino 日志记录,同时提供完整的代码示例。

准备工作

在开始之前,你需要先安装 Node.js 和 Fastify。可以通过以下命令来安装它们:

使用 pino 记录日志

在 Fastify 应用程序中使用 pino 记录日志非常简单。首先,我们需要安装 pino 模块:

然后,在 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 模块:

然后,在 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 模块:

然后,在启动应用程序时加上 --pretty 参数即可:

当你需要跟踪某些具体的日志信息时,你可以使用 pino-tee 插件来将日志输出到多个目标。例如,你可以同时将日志输出到文件和控制台:

总结

在本文中,我们介绍了如何在 Fastify 应用程序中使用 pino 日志记录库,并提供了完整的代码示例。除了基本的日志记录之外,pino 还提供了一些高级的用法,例如记录请求日志、格式化日志等。我相信,通过本文的学习和实践,你已经掌握了如何在 Fastify 应用程序中高效地使用 pino 进行日志记录的方法。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65adebe3add4f0e0ff779bf1