1

我正在将记录写入 node.js 中的文件,我需要每隔这么多行或在一段时间后用一个新文件轮换文件,但我不能在此过程中丢失任何行。如果我尝试使用 fs.createWriteStream 创建一个新流,我最终会通过覆盖旧流而丢失行。任何建议将不胜感激。

4

3 回答 3

2

不要覆盖旧流。将新流创建为单独的资源。

var activestream;

function startup() {
    activestream = fs.createWriteStream('path');
}

function record(line) {
    activestream.write(line);
}

function rotate() {
    var newstream = fs.createWriteStream('path2');
    activestream.end();
    activestream = newstream;
}

...类似的东西应该可以工作。显然,您必须弄清楚如何管理路径。

于 2014-04-04T18:47:24.153 回答
1

我将在这里给出一个非常规的答案。

你可以考虑一个像winston这样的现成库,它带有经过良好测试的功能来完全满足你的需求。考虑到它是用来写日志的,但你也可以很容易地写你的 csv 条目。

使用 winston 的另一大优势是它支持多种传输,因此您不仅可以写入文件并旋转它们,还可以写入其他媒体 MongoDB 和其他一些媒体。

它还可以执行条件写入等操作,您可以定义自定义“日志级别”以将不同的功能记录写入文件。

我建议您在烹饪自己的解决方案之前先检查一下。

于 2014-04-04T18:53:29.660 回答
1

我建议编写类似于 Jason 的自己的流管理器,但不是在请求旋转时结束流,而是让写入完成,暂停流,旋转文件,然后恢复流。每个文件只需要一个流,您不需要重新创建它。

于 2014-04-04T21:25:27.683 回答