Next.jsでpino-prettyのtransportオプションを使うとworker threadsの問題でエラーになる。transportの代わりにstreamを使えば解決する。
Next.js에서 pino-pretty의 transport 옵션을 사용하면 worker threads 문제로 오류가 발생합니다. transport 대신 stream을 사용하면 해결됩니다.
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でも問題なく動作する。
transport 대신 stream을 사용합니다. 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]