【问题标题】:Using node to stream file contents to stdout使用节点将文件内容流式传输到标准输出
【发布时间】:2020-04-06 05:49:10
【问题描述】:

我的 NodeJS 应用程序正在使用 pino 进行基于 JSON 的日志记录。 Pino 将日志文件发送到标准输出。我只是使用 ./app.js >> filename.log 将输出保存到文件中。我想设置一个小脚本,该脚本将不断流式传输日志文件,类似于尾部的 -f 标志。我不希望应用程序在到达文件末尾时退出,而是等待其他数据流式传输。我可以让文件回显到标准输出,但是一旦到达文件末尾,它就不会继续流。

const fs = require('fs');
const split = require('split2')
const pump = require('pump')

// Attempt 1 
fs.createReadStream(file)
  .pipe(split(JSON.parse))
  .on('data', function (obj) {
    console.log(obj);
  })

pump(process.stdout, streamToElastic);

// Attempt 2
const readStream = fs.createReadStream(logFileLocation);
pump(readStream.pipe(process.stdout), split(JSON.parse));

【问题讨论】:

    标签: node.js stream fs


    【解决方案1】:

    您必须自己实现它,因为内置流不提供该功能,您必须注意文件更改或轮询文件。

    您可以使用已经实现该功能的其中一个包:

    使用tail

    Tail = require('tail').Tail;
    
    tail = new Tail("fileToTail");
    
    tail.on("line", function(data) {
      console.log(data);
    });
    
    tail.on("error", function(error) {
      console.log('ERROR: ', error);
    });
    

    【讨论】:

      猜你喜欢
      • 2020-11-25
      • 2012-08-22
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 2014-07-13
      相关资源
      最近更新 更多