nodejs - направить консоль appjs в файл

Я пытаюсь подключить консоль appjs к файлу с этим кодом:

var fs = require('fs');
var logStream = fs.createWriteStream(__dirname+ '/log.txt', { flags: 'a' });
process.stdout.pipe(logStream);
process.stderr.pipe(logStream);
console.log("test");

Он создает пустой файл, но не более того... С помощью node.exe "тест" идет в консоль, а не в лог-файл. Платформа win32, но я не думаю, что это считается.

В чем проблема с кодом?

вывод:

Stdout, stderr и поток записи файла являются конечными точками типа приемника, поэтому я не могу связать их вместе. Мне нужно заменить stdout и stderr двойными фиктивными потоками, чтобы я мог привязать эти фиктивные потоки как к исходным приемникам, так и к приемнику журналов. Я не уверен, повлияет ли на console.log и console.error замена потоков предложенным механизмом supernova, я бы предпочел использовать специальный регистратор, который использует консоль вместо этого обходного пути.


person inf3rno    schedule 30.09.2012    source источник


Ответы (1)


вам нужно определить геттеры для process.stdin, process.stdout и process.stderr

var fs = require("fs")
  , errlog = fs.createWriteStream("./err.log", { flags: 'a' })

process.__defineGetter__("stderr", function(){
  return errlog 
})

process.stderr.write("test")

это должно работать

person supernova    schedule 30.09.2012
comment
Это работает для process.stderr.write("test"), но не работает для console.log('test'). Можете ли вы сказать мне, почему так? и как я могу это исправить? - person Salman; 02.09.2013
comment
console.log() переходит в STDOUT, а не в STDERR. Я не могу добавить этот код в свое приложение узла, сообщая мне: TS2339: свойство «defineGetter» не существует для типа «Процесс». - person ante.sabo; 23.10.2020