30

我有一个子进程,我在 node.js 中使用如下。我不想将输出重定向到控制台,而是将输出放在正在运行的机器上某个位置的日志文件中(并且应该适用于 windows 和 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);
});
4

5 回答 5

49

这是使用流记录到文件的示例。

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);
});
于 2013-04-22T21:17:41.843 回答
4

有两种方法可以实现这一点,一种是使用

let logConsoleStream = fs.createWriteStream('./logConsoleFile.log', {flags: 'a'});
let logErrorStream = fs.createWriteStream('./logErrorFile.log', {flags: 'a'});

并使用此重定向所有日志或错误

ls.stdout.pipe(logConsoleStream );  // redirect stdout/logs only
ls.stderr.pipe(logErrorStream );    // redirect error logs only

generalhenry通过分离日志文件,您将拥有单独的错误日志和控制台日志文件,这与上面共享的完全相同

在命令行的帮助下实现这一目标的第二种方法

当您从命令行执行节点应用程序时

node app/src/index.js

您可以在此处指定要从该应用程序重定向日志和错误的位置

使用命令行有三个流重定向命令

`>`     It will redirect your only stdout or logs to the specified path
`2>`    It will redirect your errors logs to the specified path
`2>&1 ` It will redirect all your stdout and stderr to a single file

示例:您将如何使用这些命令

node app/src/index.js > ./logsOnly.txt
node app/src/index.js 2> ./ErrorsOnly.txt
node app/src/index.js 2>&1 ./consoleLogsAndErrors.txt

我希望以后来的人会觉得这很有帮助

如果我做错了方式,请告诉我这将对我和其他人有所帮助谢谢

于 2020-11-12T07:36:56.450 回答
0

如果您运行 JS 脚本,forever那么您可以选择将日志文件定义为参数,该参数将处理您的所有 console.log 消息。更不用说让你的 nodejs 应用程序永久运行的好处了。

或者试试这个:

sudo forever start myapp.js 2>&1 /home/someuser/myapp/myapp.log
于 2013-11-07T13:58:50.977 回答
-1

永久使用以下选项

永远开始 -o out.log -e err.log server.js

于 2015-07-24T09:59:08.927 回答
-6

最佳答案在评论中,并在前面的问题中提到: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!");
    }
}); 
于 2013-04-26T07:59:35.587 回答