配置多传输通道后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('这是一条错误日志');
关键注意事项
- API版本适配:Pino 8.x不再支持旧版的
transports选项,必须用pino.transport({ targets: [...] })作为第二个参数传入logger。 - 依赖确认:确保已安装
pino和pino-pretty,pino/file是Pino内置传输,无需额外安装。 - 异步写入问题:如果脚本执行后立即退出,可能因异步传输未完成导致日志无输出。可在程序结束前调用
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
相关产品推荐
相关产品推荐

