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

自定义Transport中log函数未被调用问题求助

问题:自定义JsonDBTransport组件的log函数未被调用?

我开发了一个自定义的Winston Transport组件(JsonDBTransport),但里面的log函数始终没有被触发调用。下面是相关的实现代码片段:

module.exports = { 
  JsonDBTransport: class JsonDBTransport extends Transport { 
    constructor(options) { 
      super(options) 
      if (options.level === "error") { 
        this.logDBSystem = new Store({name: options.filename}) 
        if (this.logDBSystem.get('log') === undefined) 
          this.logDBSystem.set('log', []) 
      } else { 
        this.logDBUser = new Store({name: options.filename}) 
        if (this.logDBUser.get('log') === undefined) 
          this.logDBUser.set('log', []) 
      } 
    } 
    log(info, callback) { 
      let self = this 
      setImmediate(function () { 
        self.emit('...', // 代码不完整,但核心问题是log函数未被触发
      } 
    } 
  }
}

可能的原因及修复方案

1. 语法错误导致组件无法正常初始化

从你给出的代码片段能看到,log方法里的setImmediate回调没有闭合(缺少结束的括号和大括号),这种语法错误会直接导致整个Transport类初始化失败,log方法自然不可能被调用。先把语法问题修复:

log(info, callback) {
  let self = this;
  setImmediate(function () {
    self.emit('logged', info); // 示例:触发Winston要求的logged事件
    if (callback) callback(null, true); // 告知Winston日志处理完成
  });
}

2. 未正确实现Winston Transport的规范

Winston的自定义Transport需要严格遵循它的接口要求:

  • 必须在log方法末尾调用回调函数(如果传入的话),或者触发logged事件,否则Winston会认为日志处理失败,后续不再调用该Transport的log方法。
  • 如果你使用的是Winston 3.x及以上版本,确认你继承的是winston-transport包中的Transport类,而不是旧版的内部类。

3. 日志级别不匹配

检查你的Logger实例和Transport的级别配置是否兼容:

  • 如果Logger的全局级别是error,但Transport的级别设置为info,那么只有error级别的日志会被Logger过滤后传递给Transport,如果你只打了info级别的日志,Transport自然接收不到。
  • 确保Transport构造函数中判断的options.level和你实例化Transport时传入的level一致。

4. 未正确注册Transport到Winston Logger

确认你在创建Logger实例时,正确添加了这个自定义Transport:

const winston = require('winston');
const { JsonDBTransport } = require('./your-transport-file');

const logger = winston.createLogger({
  level: 'info',
  transports: [
    new JsonDBTransport({
      filename: 'user-logs.db',
      level: 'info' // 这里的级别要和Transport构造函数中的判断逻辑对应
    })
  ]
});

// 测试日志是否触发
logger.info('测试自定义Transport');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:17:10