Pino-pretty的customPrettifiers配置失效,报DataCloneError错误
Pino customPrettifiers 序列化报错解决办法
问题根源
Pino 多目标(targets)传输模式依赖 Worker 线程运行,而函数无法被序列化克隆传递给 Worker,所以直接在配置里写匿名函数会触发 DataCloneError。
解决方案
方案1:抽离customPrettifiers为独立模块
- 创建单独的 prettifier 文件,比如
log-prettifiers.js:
export default { time: (timestamp) => `Time: ${timestamp}` }
- 修改 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
相关产品推荐
相关产品推荐

