Next.jsでpino-prettyのtransportオプションを使うとworker threadsの問題でエラーになる。transportの代わりにstreamを使えば解決する。
在 Next.js 中使用 pino-pretty 的 transport 选项会导致 worker threads 问题并报错。使用 stream 代替 transport 即可解决。
Next.js 13以降のApp Routerで、pinoのtransportオプションを使ってpino-prettyを設定すると、以下のようなエラーが発生する:
在 Next.js 13 及更高版本的 App Router 中,如果使用 pino 的 transport 选项来配置 pino-pretty,则会发生以下错误:
Error: the worker thread exitedpino-prettytransportオプションは内部でworker threadsを使用する。Next.jsのバンドラー(SWC/webpack)がこれらのモジュールを正しく処理できず、ランタイムでエラーになる。
// ❌ これはNext.jsで動かない
// ❌ 这在 Next.js 中不起作用
const logger = pino({
transport: {
target: 'pino-pretty',
options: { colorize: true }
}
})next.config.jsserverExternalPackagesに追加する方法も提案されているが、ビルドは通っても実行時にモジュールが見つからないケースがある。
虽然有人建议添加到 next.config.js 的 serverExternalPackages 中,但即使构建通过,也可能出现运行时找不到模块的情况。
transportではなくstreamを使う。 streamはworker threadsを使わないため、Next.jsでも問題なく動作する。
使用 stream 而不是 transport。 stream 不使用 worker threads,因此可以在 Next.js 中正常工作。
import pino from "pino";
import pretty from "pino-pretty";
// ✅ streamを使えばNext.jsでも動く
const stream = pretty({
colorize: true,
ignore: "pid,hostname",
translateTime: "SYS:HH:MM:ss.l",
});
const logger = pino({ level: "debug" }, stream);# 参考
# 参考
- [Pino Bundling Documentation]