将 console.log 的输出写入文件 - AWS Javascript SDK

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

我想使用 fs 将 javascript 的输出写入文件。但是我注意到当我将 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 不会 运行.

您是否尝试过使用一些外部库,例如 winston?它 built-in 支持将日志保存到单独的文件:

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 操作后,使用回调保存另一件事。

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