Подтвердить что ты не робот

Перенаправление вывода в файл журнала с помощью node.js

У меня есть дочерний процесс, который я использую следующим образом в node.js. Вместо перенаправления вывода на консоль я хотел бы поместить вывод в файл журнала, расположенный где-то на машине, на которой он работает (и должен работать как для окон, так и для Mac).

Ниже приведен код, который я использую, и я хотел бы выводить файлы в файл журнала. Какие изменения необходимо сделать здесь? Спасибо!

Мой код:

var spawn = require('child_process').spawn,
    ls    = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

ls.on('close', function (code) {
  console.log('child process exited with code ' + code);
});
4b9b3361

Ответ 1

Лучший ответ был в комментариях и упоминается в предыдущем вопросе здесь: stackoverflow.com/questions/2496710/nodejs-write-to-file

Это выглядит так:

var fs = require('fs');
fs.writeFile("/tmp/test", "Hey there!", function(err) {
    if(err) {
        console.log(err);
    } else {
        console.log("The file was saved!");
    }
}); 

Ответ 2

Здесь приведен пример регистрации в файл с использованием потоков.

var logStream = fs.createWriteStream('./logFile.log', {flags: 'a'});

var spawn = require('child_process').spawn,
    ls    = spawn('ls', ['-lh', '/usr']);

ls.stdout.pipe(logStream);
ls.stderr.pipe(logStream);

ls.on('close', function (code) {
  console.log('child process exited with code ' + code);
});

Ответ 3

Если вы запустите свой JS script с помощью forever, тогда у вас есть возможность определить файл журнала как параметр, который будет обрабатывать все ваши сообщения console.log. Не говоря уже о том, что вы постоянно поддерживаете приложение nodejs.

Альтернативно попробуйте следующее:

sudo forever start myapp.js 2>&1 /home/someuser/myapp/myapp.log

Ответ 4

использовать навсегда с настройками ниже

forever start -o out.log -e err.log server.js