如何在node.js中旋转正在写入的文件?

kuhbmx9i  于 11个月前  发布在  Node.js
关注(0)|答案(4)|浏览(91)

我正在向node.js中的一个文件写入记录,我需要每隔几行或经过一段时间就用一个新的文件来旋转文件,但我不能在这个过程中丢失任何行。如果我尝试使用fs. fullWriteStream创建一个新的流,我最终会丢失旧流的行。任何建议都非常感谢。

hlswsv35

hlswsv351#

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

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;
}

字符串
.类似的东西应该工作。显然你必须弄清楚如何管理路径。

0lvr5msh

0lvr5msh2#

在这里我将给予一个非传统的回答。
你可以考虑一个现成的库,比如winston,它带有经过良好测试的功能,可以做你想要的事情,因为它是用来写日志的,但是你也可以很容易地写你的csv条目。
使用wendash的另一大优势是它支持多种传输,因此您不仅可以写入文件并旋转它们,还可以写入其他媒体MongoDB和其他一些媒体。
它还可以做条件写入之类的事情,你可以定义自定义的“日志级别”来将不同的功能记录写入你的文件。
我建议你在煮你自己的溶液之前先检查一下。

k4ymrczo

k4ymrczo3#

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

bwitn5fc

bwitn5fc4#

我也在寻找这个解决方案,发现npm模块rotating-file-stream非常有用,使用简单。它有不同的选项。下面是基本用法:

const rfs = require("rotating-file-stream");
const stream = rfs.createStream("file.log", {
  size: "10M", // rotate every 10 MegaBytes written
  interval: "1d", // rotate daily
  compress: "gzip" // compress rotated files
});

字符串
还有另一个流行的npm模块file-stream-rotator,但我发现另一个简单而灵活。根据您的需求选择。

相关问题