4

我有几个进程 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;
    });
});

要不然 ?

4

2 回答 2

5

这将起作用,但是如果它不断打开和关闭文件,它可能不是最佳解决方案。对于写入速度更快的东西,我会尝试将其与 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);
于 2012-06-13T16:05:01.853 回答
1

另一种解决方案是fs.appendFile. 正如 Sdedelbrock 指出的那样,fs.createWriteStream它比这种方法快得多,因为它不需要不断地打开和关闭文件。我在我的机器上编写了一个小基准,它快了大约 3 倍,绝对值得。

于 2013-07-17T09:18:00.080 回答