🍣

Vercelでunable to determine transport target for "pino-pretty"と怒られる

2024/07/09に公開

問題

ChatGPTに聞いたら一撃で解決したが、Zennに解決方法を記載しておく。

Next.jsでWEBアプリケーションを開発しており、loggerとしてpinoを使用していた。

BizDevサイドも見れるように、Vercelにデプロイを行うと、ビルドは成功するが以下のメッセージでエラーが発生してしまう。
Application error: a server-side exception has occurred (see the server logs for more information).

コード

logger.ts
export const logger = pino({
  transport: {
    target: 'pino-pretty',
    options: { colorize: true }
  },
  browser: {
    asObject: true,
  },
  timestamp: pino.stdTimeFunctions.isoTime,
});

解決方法

  1. Vercelのシステム環境変数を使用して、Vercelにデプロイされているかを判断を行う。
  2. Vercelにデプロイされている場合はpino-prettyを使用しないようにする。

Vercelの環境変数はSystem Environment Variables Overviewを参照しました。

コード

logger.ts
export const logger = pino({
  // Vercelの環境変数によってログの出力先を変更
  transport: process.env.VERCEL ? undefined : {
    target: 'pino-pretty',
    options: { colorize: true }
  },
  browser: {
    asObject: true,
  },
  timestamp: pino.stdTimeFunctions.isoTime,
});
SasaTech Engineer Blog

Discussion