使用node.js将输出重定向到日志文件

Redirecting output to a log file using node.js

我在node.js中使用了如下子进程。我不想将输出重定向到控制台,而是将输出放在运行此操作的计算机上的某个位置的日志文件中(应该对Windows和Mac都有效)。

下面的代码是我正在使用的代码,我希望将这些文件输出到日志文件中。在这里需要做什么改变?谢谢!

我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
2
3
4
5
6
7
8
9
10
11
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);
});


如果使用forever运行JS脚本,则可以选择将日志文件定义为参数,该参数将处理所有console.log消息。更不用说让你的Nodejs应用永久性地保持运行的好处了。

或者试试这个:

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


永远使用以下选项

永久启动-o out.log-e err.log server.js


最好的答案是在评论中,并在前面的问题中提到:stackoverflow.com/questions/2496710/nodejs-write-to-file

具体如下:

1
2
3
4
5
6
7
8
var fs = require('fs');
fs.writeFile("/tmp/test","Hey there!", function(err) {
    if(err) {
        console.log(err);
    } else {
        console.log("The file was saved!");
    }
});