📅  最后修改于: 2023-12-03 14:41:09.684000             🧑  作者: Mango
Fastify 是一个快速的 Web 应用程序框架,其为开发者提供了一种灵活且易用的方式来构建可扩展的应用程序。而日志记录是一个关键的组成部分,它能为程序员提供有用的信息以供应用程序监控、维护和故障排除。在本篇文章中,我们将介绍如何在 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,
})
在此示例中,我们指定了选项 level
为 info
,由此只记录信息和以下级别的日志:info、warn、error。我们还提供了一个 serializers
函数来处理 HTTP 响应对象,并返回一个更清晰的日志格式。我们还使用了一个传输器 prettyPrint
来美化输出,但我们只在非生产环境中启用它。
为了更好地跟踪日志记录,我们可以使用专业的日志记录工具或库,例如 Pino 或 Bunyan。它们提供了一种灵活且可定制的方法来记录日志和追踪错误。
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 是另一个流行的 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 内置了日志记录插件,但我们也可以将其与其他专业的日志记录库以及各种传输器、日志格式和即插即用的插件相集成,以便在我们的应用程序中对日志进行更高级、更定制的跟踪和记录。