将 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()
。为什么我之前没有注意到,我不知道。
我想使用 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()
。为什么我之前没有注意到,我不知道。