Next.jsでpino-prettyのtransportオプションを使うとworker threadsの問題でエラーになる。transportの代わりにstreamを使えば解決する。
L'utilisation de l'option transport de pino-pretty avec Next.js entraîne une erreur due à des problèmes de worker threads. L'utilisation de stream à la place de transport résout le problème.
Next.js 13以降のApp Routerで、pinoのtransportオプションを使ってpino-prettyを設定すると、以下のようなエラーが発生する:
Avec l'App Router de Next.js 13 et versions ultérieures, la configuration de pino-pretty à l'aide de l'option transport de pino provoque l'erreur suivante :
Error: the worker thread exitedpino-prettytransportオプションは内部でworker threadsを使用する。Next.jsのバンドラー(SWC/webpack)がこれらのモジュールを正しく処理できず、ランタイムでエラーになる。
thread-stream// ❌ これはNext.jsで動かない
// ❌ Ceci ne fonctionne pas avec Next.js
const logger = pino({
transport: {
target: 'pino-pretty',
options: { colorize: true }
}
})next.config.jsserverExternalPackagesに追加する方法も提案されているが、ビルドは通っても実行時にモジュールが見つからないケースがある。
Il a également été suggéré d'ajouter serverExternalPackages à next.config.js, mais même si la construction réussit, il arrive que les modules ne soient pas trouvés lors de l'exécution.
transportではなくstreamを使う。 streamはworker threadsを使わないため、Next.jsでも問題なく動作する。
Utilisez stream au lieu de transport. stream n'utilise pas de worker threads, il fonctionne donc sans problème avec 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);# 参考
# Références
- [Pino Bundling Documentation]