Перенаправление вывода в файл журнала с помощью 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);
});
Ответы
Ответ 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