📜  fastify 日志记录:跟踪 (1)

📅  最后修改于: 2023-12-03 14:41:09.684000             🧑  作者: Mango

Fastify 日志记录:跟踪

Fastify 是一个快速的 Web 应用程序框架,其为开发者提供了一种灵活且易用的方式来构建可扩展的应用程序。而日志记录是一个关键的组成部分,它能为程序员提供有用的信息以供应用程序监控、维护和故障排除。在本篇文章中,我们将介绍如何在 Fastify 中实现日志记录以及如何追踪这些日志。

安装 Fastify

首先,我们需要安装 Fastify 及其相关依赖。我们可以使用 npm 或 yarn 来安装 Fastify。

npm install fastify
日志记录

Fastify 提供了一个内置的日志记录插件 fastify-logger 来记录应用程序的日志。要使用该插件,我们需要将其在 Fastify 中注册。

const fastify = require('fastify')
const logger = require('fastify-logger')

const app = fastify()

app.register(logger)

通过注册日志记录插件,Fastify 将在默认情况下使用 stdout 来记录所有信息级别的日志。但是,我们也可以使用选项 level 来指定日志记录的级别,并使用不同的传输器来输出日志。

const app = fastify()

app.register(logger, {
  level: 'info',
  serializers: {
    res(res) {
      return {
        statusCode: res.statusCode,
        headers: res.getHeaders(),
        body: res.raw.toString()
      }
    }
  },
  useLevelLabels: true,
  prettyPrint: process.env.NODE_ENV !== 'production',
  prettifier: require('pino-pretty'),
  stream: newLoggerStream,
})

在此示例中,我们指定了选项 levelinfo,由此只记录信息和以下级别的日志:info、warn、error。我们还提供了一个 serializers 函数来处理 HTTP 响应对象,并返回一个更清晰的日志格式。我们还使用了一个传输器 prettyPrint 来美化输出,但我们只在非生产环境中启用它。

日志追踪

为了更好地跟踪日志记录,我们可以使用专业的日志记录工具或库,例如 Pino 或 Bunyan。它们提供了一种灵活且可定制的方法来记录日志和追踪错误。

Pino

Pino 是一个基于 Node.js 的快速日志库,支持多个传输器、多种日志格式和高度扩展性。我们可以使用 Pino 替换 Fastify 默认的日志插件,如下所示:

const fastify = require('fastify')
const pino = require('pino')
const pinoFastify = require('pino-fastify')

const app = fastify({
  logger: pino(pinoFastify())
})

在这个例子中,我们使用 pino-fastify 插件将 Pino 作为 Fastify 的默认日志记录库。pino-fastify 提供了一个与 Fastify 支持的 JSON 日志格式相兼容的日志格式。

此外,我们还可以使用 Pino 的继承功能, 继承 Fastify 的默认记录器,以便记录可以一并输出到两个记录器中:

const fastify = require('fastify')
const pino = require('pino')
const pinoFastify = require('pino-fastify')

const app = fastify({
  logger: pino(pinoFastify(), fastify.logger)
})

在这种情况下,我们还可以使用 fastify.logger 记录器来记录 Fastify 的日志。

Bunyan

Bunyan 是另一个流行的 Node.js 日志库,与 Pino 相似,可以使用多个传输器、多种格式和高度定制化的功能。我们可以使用 fastify-bunyan 插件将 Bunyan 作为 Fastify 的日志记录库,如下所示:

const fastify = require('fastify')
const bunyan = require('bunyan')
const fastifyBunyanLogger = require('fastify-bunyan-logger')

const app = fastify()

const bunyanLogger = bunyan.createLogger({
  name: 'logger',
  level: process.env.LOG_LEVEL || 'info'
})

app.register(fastifyBunyanLogger, {
  serializers: {
    req: bunyan.stdSerializers.req,
    res: bunyan.stdSerializers.res
  },
  genReqId: req => req.id,
  stream: bunyanLogger
})

在这个例子中,我们使用 fastify-bunyan-logger 插件来将 Bunyan 作为 Fastify 的默认日志记录库。fastify-bunyan-logger 提供了默认的钩子用于记录 HTTP 请求和响应、记录 Fastify 平均响应时间以及使用 Bunyan 的默认序列化程序。我们还初始化了 Bunyan 记录器,以便将日志记录发送到记录器服务器,这样我们就可以轻松地在各种环境中便捷地追踪和分析日志。

结论

日志记录是任何应用程序开发的重要组成部分,能够在监测、维护和排除故障时提供有用的信息。Fastify 内置了日志记录插件,但我们也可以将其与其他专业的日志记录库以及各种传输器、日志格式和即插即用的插件相集成,以便在我们的应用程序中对日志进行更高级、更定制的跟踪和记录。