4

私はいくつかのプロセスnode.jsを持っています。各リクエストで1つのファイルに1つの文字列のみを追加したい(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 に答える