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

配置多传输通道后Pino Logger无日志输出问题排查

Pino多传输通道配置无输出问题解决

Pino 8.x版本的传输API和旧版差异较大,你遇到的问题核心是配置方式不符合v8的要求——直接在logger选项里设置transports数组的写法已失效,必须通过pino.transport()方法配置多传输目标。

正确配置示例

以下是同时输出到文件和美化控制台的可用代码:

const pino = require('pino');

// 初始化logger,指定自定义级别+多传输目标
const logger = pino({
  level: 'info' // 你的自定义日志级别
}, pino.transport({
  targets: [
    // 传输到文件
    {
      target: 'pino/file',
      options: {
        destination: './app.log' // 日志文件路径
      }
    },
    // 传输到控制台并美化
    {
      target: 'pino-pretty',
      options: {
        colorize: true,
        translateTime: 'yyyy-mm-dd HH:MM:ss',
        ignore: 'pid,hostname' // 可选:忽略不需要的字段
      }
    }
  ]
}));

// 测试日志输出
logger.info('这是一条测试日志');
logger.error('这是一条错误日志');

关键注意事项

  1. API版本适配:Pino 8.x不再支持旧版的transports选项,必须用pino.transport({ targets: [...] })作为第二个参数传入logger。
  2. 依赖确认:确保已安装pino和pino-pretty,pino/file是Pino内置传输,无需额外安装。
  3. 异步写入问题:如果脚本执行后立即退出,可能因异步传输未完成导致日志无输出。可在程序结束前调用await logger.flush()等待写入完成:
    // 示例:脚本结束前确保日志写入
    logger.info('程序即将退出');
    await logger.flush();
    process.exit(0);
    

ESM模块写法

如果项目使用ESM(import/export),配置方式类似:

import pino from 'pino';

const logger = pino({
  level: 'info'
}, pino.transport({
  targets: [
    { target: 'pino/file', options: { destination: './app.log' } },
    { target: 'pino-pretty', options: { colorize: true } }
  ]
}));

logger.info('ESM环境测试日志');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:55:22