Next.jsでpino-prettyのtransportオプションを使うとworker threadsの問題でエラーになる。transportの代わりにstreamを使えば解決する。
Menggunakan opsi transport pino-pretty di Next.js menyebabkan kesalahan karena masalah worker threads. Solusinya adalah dengan menggunakan stream sebagai pengganti transport.
Next.js 13以降のApp Routerで、pinoのtransportオプションを使ってpino-prettyを設定すると、以下のようなエラーが発生する:
Pada App Router di Next.js 13 ke atas, jika Anda mengonfigurasi pino-pretty menggunakan opsi transport pino, Anda akan mengalami kesalahan seperti berikut:
Error: the worker thread exitedpino-prettytransportオプションは内部でworker threadsを使用する。Next.jsのバンドラー(SWC/webpack)がこれらのモジュールを正しく処理できず、ランタイムでエラーになる。
thread-streamOpsi transport pino-pretty secara internal menggunakan worker threadsthread-stream. Bundler Next.js (SWC/webpack) tidak dapat memproses modul-modul ini dengan benar, sehingga menyebabkan kesalahan saat runtime.
// ❌ これはNext.jsで動かない
// ❌ Ini tidak akan berfungsi di Next.js
const logger = pino({
transport: {
target: 'pino-pretty',
options: { colorize: true }
}
})next.config.jsserverExternalPackagesに追加する方法も提案されているが、ビルドは通っても実行時にモジュールが見つからないケースがある。
Ada juga saran untuk menambahkan ke serverExternalPackages next.config.js, tetapi meskipun build berhasil, ada kasus di mana modul tidak ditemukan saat runtime.
transportではなくstreamを使う。 streamはworker threadsを使わないため、Next.jsでも問題なく動作する。
Gunakan stream, bukan transport. Stream tidak menggunakan worker threads, sehingga berfungsi dengan baik di 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);# 参考
# Referensi
- [Pino Bundling Documentation]
- [Dokumentasi Bundling Pino]