You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pino-pretty的customPrettifiers配置失效,报DataCloneError错误

Pino customPrettifiers 序列化报错解决办法

问题根源

Pino 多目标(targets)传输模式依赖 Worker 线程运行,而函数无法被序列化克隆传递给 Worker,所以直接在配置里写匿名函数会触发 DataCloneError。

解决方案

方案1:抽离customPrettifiers为独立模块

  1. 创建单独的 prettifier 文件,比如 log-prettifiers.js:
export default {
  time: (timestamp) => `Time: ${timestamp}`
}
  1. 修改 Pino 配置,通过模块路径引用该文件:
import pino from "pino"

const logger = pino({
  transport: {
    targets: [
      { 
        target: "pino-pretty", 
        options: { destination: "./logs.log", mkdir: true, colorize: false } 
      },
      {
        target: "pino-pretty",
        options: {
          destination: process.stdout.fd,
          customPrettifiers: require.resolve("./log-prettifiers.js"),
        },
      },
    ],
  },
})

logger.info("hi")

方案2:单目标场景简化配置

如果不需要同时输出到文件和终端,直接用单目标传输可以避免 Worker 序列化问题:

import pino from "pino"

const logger = pino({
  transport: {
    target: "pino-pretty",
    options: {
      destination: process.stdout.fd,
      customPrettifiers: {
        time: (timestamp) => `Time: ${timestamp}`
      }
    }
  }
})

logger.info("hi")

核心要点

  • 多目标模式下,所有配置项必须是可序列化类型(JSON 支持的字符串、数字、对象等),函数这类不可序列化的值必须通过模块路径引入。
  • pino-pretty 会自动加载指定路径的模块,使用其导出对象作为 customPrettifiers。

内容的提问来源于stack exchange,提问作者Raghavan Vidhyasagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:16:06