ログ ファイルに書き込みたい場合、つまりファイルの末尾にデータを追加する場合は、絶対に使用しないappendFile
でください。appendFile
ファイルに追加する各データのファイル ハンドルを開きます。しばらくすると美しいEMFILE
エラーが発生します。
appendFile
よりも使いにくいと付け加えることができWriteStream
ます。
例appendFile
:
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
fs.appendFile("append.txt", index+ "\n", function (err) {
if (err) console.log(err);
});
});
console.log(new Date().toISOString());
私のコンピューターでは最大 8000 です。ファイルにデータを追加すると、次のようになります。
{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
at Error (native)
errno: -4066,
code: 'EMFILE',
syscall: 'open',
path: 'C:\\mypath\\append.txt' }
さらに、appendFile
有効にすると書き込みが行われるため、ログはタイムスタンプによって書き込まれません。例でテストできます。100000 の代わりに 1000 を設定すると、順序はランダムになり、ファイルへのアクセスに依存します。
ファイルに追加する場合は、次のような書き込み可能なストリームを使用する必要があります。
var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
終了したいときに終了します。を使用する必要さえありませんstream.end()
。デフォルトのオプションはAutoClose:true
であるため、プロセスが終了するとファイルが終了し、ファイルを開きすぎないようにします。