我正在使用nodejs中的winston开发一个日志框架,我使用Async模块检查了winston,但是我需要验证它是否真的是异步性质. 请建议. 我对温斯顿没有任何经验,除了我知道它及其目的.在对 source o
请建议.
我对温斯顿没有任何经验,除了我知道它及其目的.在对 source on github进行快速回顾之后,我会说不,winston在所有方面都不是真正的异步.>它确实发出,但EventEmitter不是异步的.
>方法具有异步样式签名(w /回调),但并不总是异步.
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);
我会告诉温斯顿它的File
transport is actually async, but only because fs
is.
不要忘记“无论如何,当目的地是终端或文件时,控制台功能是同步的”.