簡體   English   中英

使用Node.js同步記錄

[英]Synchronous logging with 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);
    }

};

問題在於,finish事件永遠不會觸發,我也嘗試了監聽排水事件,但似乎也沒有觸發。 調用process.stdout.end()似乎會引起問題。 我應該打電話給process.stdout.flush()?

我不確定是否需要同步日志記錄,但是無論哪種方式,此代碼都不會鎖定事件循環,因為我正在使用異步I / O且不等待任何東西,等等。

從Node.js流程的文檔中,看起來好像調用end()會拋出並結束,永遠不會被調用:

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

所以也許我應該使用不同於process.stdout的其他可寫流,並將其通過管道傳遞給process.stdout? 不知道。

似乎process.stdout.write至少在指向終端/控制台時已經同步。 似乎不需要添加任何東西。 此外,似乎沒有process.stdout流觸發使我的原始設計用於同步日志記錄所需的事件,如我的問題所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM