Next.jsでpino-prettyのtransportオプションを使うとworker threadsの問題でエラーになる。transportの代わりにstreamを使えば解決する。
Het gebruik van de transport-optie van pino-pretty in Next.js resulteert in een fout vanwege worker threads-problemen. Het gebruik van stream in plaats van transport lost dit op.
Next.js 13以降のApp Routerで、pinoのtransportオプションを使ってpino-prettyを設定すると、以下のようなエラーが発生する:
Bij gebruik van de pino transport-optie om pino-pretty te configureren in de App Router van Next.js 13 of hoger, treedt de volgende fout op:
Error: the worker thread exitedpino-prettytransportオプションは内部でworker threadsを使用する。Next.jsのバンドラー(SWC/webpack)がこれらのモジュールを正しく処理できず、ランタイムでエラーになる。
thread-streamDe pino-prettytransport-optie gebruikt intern worker threadsthread-stream. De bundler van Next.js (SWC/webpack) kan deze modules niet correct verwerken, wat resulteert in een runtime-fout.
// ❌ これはNext.jsで動かない
// ❌ Dit werkt niet in Next.js
const logger = pino({
transport: {
target: 'pino-pretty',
options: { colorize: true }
}
})next.config.jsserverExternalPackagesに追加する方法も提案されているが、ビルドは通っても実行時にモジュールが見つからないケースがある。
Er is ook een methode voorgesteld om serverExternalPackages toe te voegen aan next.config.js, maar zelfs als de build lukt, kunnen modules mogelijk niet worden gevonden tijdens runtime.
transportではなくstreamを使う。 streamはworker threadsを使わないため、Next.jsでも問題なく動作する。
Gebruik stream in plaats van transport. stream gebruikt geen worker threads en werkt daarom zonder problemen in 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);# 参考
# Referentie
- [Pino Bundling Documentation]
- [Pino Bundling Documentation]