Vercel 上的 pino-datadog-transport 与 Next.js

sim*_*ner 7 datadog next.js vercel pinojs

我正在尝试将在 Vercel 上运行的 Next.js 项目从

    "pino-datadog": "2.0.2",
    "pino-multi-stream": "6.0.0",
Run Code Online (Sandbox Code Playgroud)

    "pino": "8.4.2",
    "pino-datadog-transport": "1.2.2",
Run Code Online (Sandbox Code Playgroud)

我从 pino-datadog-transport 的README.md复制设置:

import { LoggerOptions, pino } from 'pino'

const pinoConf: LoggerOptions = {
  level: 'trace',
}

const logger = pino(
  pinoConf,
  pino.transport({
    target: 'pino-datadog-transport',
    options: {
      ddClientConf: {
        authMethods: {
          apiKeyAuth: process.env.DATADOG_API_KEY,
        },
      },
      ddServerConf: {
        site: 'datadoghq.eu',
      },
      service: process.env.VERCEL_URL
      ddsource: 'nodejs',
    },
  }),
)
Run Code Online (Sandbox Code Playgroud)

这似乎在本地工作正常,但是当我在 Vercel 上发布它并在那里运行时,出现以下错误:

ERROR   Error: unable to determine transport target for "pino-datadog-transport"
    at fixTarget (/var/task/node_modules/pino/lib/transport.js:136:13)
    at Function.transport (/var/task/node_modules/pino/lib/transport.js:110:22)
Run Code Online (Sandbox Code Playgroud)

我是否缺少一些额外的配置来使其正常工作?还有其他人运行此设置或类似的东西来使用 Next.js 在 Vercel 上获取显式日志吗?

我也在 Vercel 中启用了 Datadog 集成,但console.logs据我所知,这只转发 Next.js 日志,而不是显式或标准的 Pino 日志。

sim*_*ner 1

此问题的解决方案是导入,即使代码中实际未使用导入中的任何内容。

Next.js 似乎删除了部署代码时未导入的所有代码。

所以,添加

import 'pino-datadog-transport'
Run Code Online (Sandbox Code Playgroud)

文件顶部的解决了这个问题。