【问题标题】:How can I rotate the file I'm writing to in node.js?如何在 node.js 中旋转我正在写入的文件?
【发布时间】:2014-04-04 18:12:38
【问题描述】:

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

【问题讨论】:

  • 记录了某种日志?
  • 记录为 csv 格式,以批量发送到数据库。

标签: node.js node.js-stream


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 是的,我之前考虑过这样做,但我希望在命名约定上有更多的灵活性。非常感谢您的回复!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 2016-05-13
      • 2011-06-08
      • 1970-01-01
      • 2014-01-01
      • 2016-05-19
      • 2020-01-29
      • 1970-01-01
      相关资源
      最近更新 更多