winston日志框架是真正的异步

时间:2014-09-01 07:04:55

标签: node.js winston

我正在使用nodejs中的winston开发一个日志框架,我已经使用Async模块检查了winston,但是我需要验证它是否真的是异步性质。

请建议。

1 个答案:

答案 0 :(得分:5)

我对温斯顿没有经验,除了我知道它及其目的。快速查看source on github之后,我会说不,winston在所有方面都不是真正的异步

  • emit,但EventEmitter不是异步。
  • 方法具有异步样式签名(w / callback),但并不总是异步。

Console transport calls callback without a nextTick - 它有一个异步样式的签名,但它仍然在同一个刻度内,即:

Console.prototype.log = function (level, msg, meta, callback) {
  if (this.silent) {
    return callback(null, true);
  }
  //...
  if (level === 'error' || level === 'debug') {
    process.stderr.write(output + '\n');
  } else {
    process.stdout.write(output + '\n');
  }

  //
  // Emit the `logged` event immediately because the event loop
  // will not exit until `process.stdout` has drained anyway.
  //
  self.emit('logged');
  callback(null, true);
};

Logger is similar to Console如前所述,它会立即发出回调,而不是nextTick(或其他一些真正的异步操作)。它确实使用async module, but that is not asynchronous on all accounts either,即:

  function cb(err) {
    if (callback) {
      if (err) return callback(err);
      callback(null, level, msg, meta);
    }
    callback = null;
    if (!err) {
      self.emit('logged', level, msg, meta);
    }
  }

  async.forEach(this._names, emit, cb);

我会给Winston一个File transport is actually async, but only because fs is

不要忘记“无论如何,当目的地是终端或文件时,控制台功能是同步的。”