我有几个进程node.js.我想在每个请求中只向一个文件添加一个字符串(如nginx,apache等中的日志文件)。做到最好的方法是什么? 简单:
fs.open(file, "a", 0744, function (err, fd) {
if (err) throw err;
fs.write(fd, data, null, 'utf8', function (err, written) {
if (err) throw err;
});
});
或者?
答案 0 :(得分:4)
这将有效,但如果它不断打开和关闭文件,它可能不是最好的解决方案。对于写得更快的东西,我会尝试对fs.createWriteStream进行基准测试,特别是因为这会为你提供一个可以在路径中使用的范围。
var fs = require("fs");
//set dummy data as random number
var data = Math.floor(Math.random()*11);
//Set our log file as a writestream variable with the 'a' flag
var logFile = fs.createWriteStream('log.txt', {
flags: "a",
encoding: "encoding",
mode: 0744
})
//call the write option where you need to append new data
logFile.write(new Date().toSting + ': ' data);
logFile.write(new Date().toSting + ': ' data);
答案 1 :(得分:0)
另一个解决方案是fs.appendFile
。正如Sdedelbrock指出的那样,fs.createWriteStream
比这个方法快得多,因为它不需要不断地打开和关闭文件。我在我的机器上编写了一个小基准,它的速度提高了约3倍,绝对值得。