使用Node.js进行同步日志记录

时间:2016-01-29 02:17:26

标签: javascript node.js

我只是使用Node.js创建一些同步日志记录。

我认为console.log是同步的,但我希望使用process.stdout,一个可写的流。

这是我到目前为止所做的:

var messages = [];
var okToWrite = true;

process.stdout.on('finish', function () {

    okToWrite = true;
    if (messages.length > 0) {
        runnerLog(messages.pop());
    }

});

module.exports = function runnerLog(data) {

    if (okToWrite) {
        okToWrite = false;
        process.stdout.write(data);
        process.stdout.end();
    }
    else {
        messages.push(data);
    }

};

问题是终止事件永远不会被触发,我也试着听取排水事件,但这似乎也没有被解雇。调用process.stdout.end()似乎只会导致问题。我应该致电process.stdout.flush()?

吗?

我不确定是否需要同步日志记录,但无论哪种方式,此代码都不会锁定事件循环,因为我正在使用异步I / O而不是等待任何事情等等。它都是偶然的。< / p>

从Node.js进程的文档中,看起来调用end()将抛出并完成永远不会被调用:

https://nodejs.org/api/process.html#process_process_stdout

所以也许我应该使用除process.stdout之外的其他可写流并将其传递给process.stdout?不知道。

1 个答案:

答案 0 :(得分:0)

似乎process.stdout.write,至少在指向终端/控制台时已经是同步的。似乎没有必要添加任何东西。此外,如我的问题所述,process.stdout流似乎不会触发使我的原始设计进行同步记录所需的事件。