Итак, у меня есть этот простой обезьяний патч на process.stdout.write
/ process.stderr.write
const strm = fs.createWriteStream(logfile);
const stdoutWrite = process.stdout.write;
process.stdout.write = function () {
strm.write.apply(strm,arguments);
stdoutWrite.apply(process.stdout, arguments);
};
(для process.stderr он идентичен и пишет в тот же поток).
Проблема:
Когда я запускаю этот процесс с node x.js
Поток не завершает всю запись перед закрытием, даже не закрывает. Однако, если я бегу
$ node y.js # this runs x.js in child process
теперь поток, запущенный в дочернем элементе, завершит запись, и файл журнала будет заполнен.
С чего бы это? Если не считать использования fs.appendFileSync
, есть ли способ гарантировать, что поток истощится до закрытия процесса?
ИЗМЕНИТЬ:
Я думаю, что знаю, почему это происходит - я вызываю process.exit()
, который преждевременно закроет процесс и, вероятно, будет вызван до завершения потока.
Есть ли способ прослушать, когда поток закончит запись? Если вызовите finish() в потоке, когда я вызываю process.exit(), это кажется искусственным «финишем». Я пытался дождаться события «слива», но, похоже, оно никогда не срабатывает.