我正在使用 nodejs 中的 winston 开发一个日志框架,我使用 Async 模块检查了 winston,但我需要验证它是否真的是异步性质的。
请建议。
除了我知道它及其目的之外,我对 Winston 没有任何经验。在快速查看github 上的源代码后,我会说不,winston 在所有方面都不是真正的异步。
emit
,但EventEmitter
不是异步的。callback
),但并不总是异步的。没有 nextTick的Console
传输调用callback
- 它具有异步样式的签名,但它仍然在同一个刻度内,即:
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
类似于Console
前面提到的,它立即发出回调 w/oa nextTick
(或其他一些真正的异步操作)。它确实使用了该async
模块,但这也不是在所有帐户上都是异步的,即:
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
传输实际上是异步的,但仅仅是因为fs
is .
无论如何,不要忘记“当目标是终端或文件时,控制台功能是同步的”。