我正在向node.js中的一个文件写入记录,我需要每隔几行或经过一段时间就用一个新的文件来旋转文件,但我不能在这个过程中丢失任何行。如果我尝试使用fs. fullWriteStream创建一个新的流,我最终会丢失旧流的行。任何建议都非常感谢。
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; }
字符串.类似的东西应该工作。显然你必须弄清楚如何管理路径。
0lvr5msh2#
在这里我将给予一个非传统的回答。你可以考虑一个现成的库,比如winston,它带有经过良好测试的功能,可以做你想要的事情,因为它是用来写日志的,但是你也可以很容易地写你的csv条目。使用wendash的另一大优势是它支持多种传输,因此您不仅可以写入文件并旋转它们,还可以写入其他媒体MongoDB和其他一些媒体。它还可以做条件写入之类的事情,你可以定义自定义的“日志级别”来将不同的功能记录写入你的文件。我建议你在煮你自己的溶液之前先检查一下。
k4ymrczo3#
我建议你写一个类似于Jason的流管理器,但不是在请求旋转时结束流,而是让写完成,暂停流,旋转文件,然后恢复流。每个文件只需要一个流,你不需要重新创建它。
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,但我发现另一个简单而灵活。根据您的需求选择。
4条答案
按热度按时间hlswsv351#
不要覆盖旧的流。创建新的流作为一个单独的资源。
字符串
.类似的东西应该工作。显然你必须弄清楚如何管理路径。
0lvr5msh2#
在这里我将给予一个非传统的回答。
你可以考虑一个现成的库,比如winston,它带有经过良好测试的功能,可以做你想要的事情,因为它是用来写日志的,但是你也可以很容易地写你的csv条目。
使用wendash的另一大优势是它支持多种传输,因此您不仅可以写入文件并旋转它们,还可以写入其他媒体MongoDB和其他一些媒体。
它还可以做条件写入之类的事情,你可以定义自定义的“日志级别”来将不同的功能记录写入你的文件。
我建议你在煮你自己的溶液之前先检查一下。
k4ymrczo3#
我建议你写一个类似于Jason的流管理器,但不是在请求旋转时结束流,而是让写完成,暂停流,旋转文件,然后恢复流。每个文件只需要一个流,你不需要重新创建它。
bwitn5fc4#
我也在寻找这个解决方案,发现npm模块rotating-file-stream非常有用,使用简单。它有不同的选项。下面是基本用法:
字符串
还有另一个流行的npm模块file-stream-rotator,但我发现另一个简单而灵活。根据您的需求选择。