Write output of console.log to file - AWS Javascript SDK

时间:2017-02-15 07:52:09

标签: javascript node.js filesystems aws-sdk

I want to write the output of my javascript to a file using fs 将隐藏的div加载为Popup。但我注意到当我把 fs.appendFile()放入我的内部时fs不起作用 的 ec2.describeSpotFleetRequests()即可。针对这种情况的任何解决方法?

示例代码:

fs.appendFile('./spotfleet.txt', 'Hello world!', (err) => {
    if (err) throw err;
    console.log('It\'s saved!');
});

ec2.describeSpotFleetRequests(params,function(err, data) {
    if (err) console.log(err, err.stack);
    else {
        for (var fleet in data.SpotFleetRequestConfigs) {
            reqId = data.SpotFleetRequestConfigs[fleet].SpotFleetRequestId; // gets spot fleet ID
            fs.appendFile('./spotfleet.txt', 'Hello world!', (err) => {
                if (err) throw err;
                console.log('It\'s saved!');
            });
        }
    }
});

第一个fs.appendFile将编写" Hello world!"到spotfleet.txt但第二个fs.appendFile不会运行。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用winston之类的外部库?它内置支持将日志保存到单独的文件中:

winston.add(winston.transports.File, { filename: 'spotfleet.txt' })

或通过configure()来电:

winston.configure({
  transports: [
    new (winston.transports.File)({ filename: 'spotfleet.txt' })
    ]
})

您使用触发的所有日志,例如:

winston.info('Hello world!')

将保存到所需的文件。它比console.log更优雅......

<强>更新

因为您通过提供代码示例编辑了您的问题,所以我在这里看到了问题所在。

fs.appendFile 异步,因此您无法像循环中那样在循环中调用它。

完成一个fs.appendFile操作后,使用回调来保存另一个操作。

答案 1 :(得分:0)

正如szymonm在他的回答中提到的,fs.appendFile()是异步的,所以我不能在循环中调用它。同步版本有fs.appendFileSync()的好处。为什么我之前没有注意到,我不知道。