作为 fastify 插件的 pino logger

pino logger as fastify plugin

我已经为 fastify 记录器创建了自己的选项和流:

const logger = pino(
{
  level: 'info',
  ...ecsFormat,
},
pinoMultiStream.multistream([
  { stream: streamToElastic },
  {
    stream: pretty({
      colorize: true,
      sync: true,
      ignore: 'pid',
    }),
  },
]),)

const fastify = Fastify({logger})

现在我想将这个选项提取为 fastify 插件,我该如何实现这个功能?如果那不可能,我该怎么做才能提取此代码?

你不能将你的代码封装到 Fastify 插件中,因为 Fastify 的记录器已经在那个时候创建​​了。

在这种情况下,您需要定义自己的逻辑来构建 fastify 服务器的配置,例如 decorator 模式。

您将获得的用户体验类似于:

const decorateLogger = require('my-logger-module')

const applicationConfig = loadAppConfig()

decorateLogger(applicationConfig, options)

const app = Fastify(applicationConfig)