You need to enable JavaScript to run this app. MERN项目Express后端Winston集成Papertrail闲置时报length属性读取错误
优惠活动
大模型
产品
解决方案
定价
更多

MERN项目Express后端Winston集成Papertrail闲置时报length属性读取错误

问题根因

你遇到的错误是旧版winston-papertrail依赖和Winston 3.x版本不兼容导致的:

  • 闲置数小时报错的触发条件是Papertrail的TLS长连接超时断开,旧版winston-papertrail在处理连接错误的逻辑里,给Winston核心传递了未定义的参数,Winston核心代码尝试访问该参数的length属性就抛出了这个异常。
  • winston-papertrail已经停止维护多年,仅支持Winston 2.x版本,完全不兼容你当前使用的Winston 3.x API。

解决步骤

1. 替换兼容的Papertrail Transport

卸载废弃的winston-papertrail,换成适配Winston 3.x的维护版本:

npm uninstall winston-papertrail
npm install winston-papertrail-transport

2. 修改日志配置代码

调整Papertrail的引入和初始化逻辑:

// 删掉原来的 require("winston-papertrail").Papertrail; 换成下面的引入
const { PapertrailTransport } = require('winston-papertrail-transport');

// 调整transports数组里的Papertrail实例配置
const transports = [
  new winston.transports.Console(console),
  new winston.transports.File({
    ...file,
    colorize: false // 额外修正:文件输出不需要着色,避免写入控制字符乱码
  }),
  new winston.transports.File({
    ...error_file,
    colorize: false // 同上修正
  }),
  // 替换原来的winston.transports.Papertrail
  new PapertrailTransport({
    host: "logs5.papertrailapp.com",
    port: 32019,
    handleExceptions: true,
    flushOnClose: true
  })
];

3. 加错误监听兜底

给Papertrail Transport添加独立的错误监听,避免未知错误抛到全局导致进程异常:

const papertrailTransport = new PapertrailTransport({
  host: "logs5.papertrailapp.com",
  port: 32019,
  handleExceptions: true,
  flushOnClose: true
});
// 捕获Transport自身的错误,不要往上抛
papertrailTransport.on('error', (err) => {
  console.error('Papertrail日志上传错误:', err);
});

// 把实例放到transports数组里
const transports = [
  new winston.transports.Console(console),
  new winston.transports.File({...file, colorize: false}),
  new winston.transports.File({...error_file, colorize: false}),
  papertrailTransport
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 15:36:00