如果要写入日志文件,即将数据附加到文件末尾,切勿使用 。 为您添加到文件中的每条数据打开一个文件句柄,过了一会儿,您会得到一个漂亮的错误。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' }
此外,启用时将写入,因此您的日志不会按时间戳写入。你可以用例子测试,设置1000代替100000,顺序将是随机的,取决于对文件的访问。appendFile
如果要追加到文件,则必须使用可写流,如下所示:
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