如何在节点js中同步读取文本文件和分组行?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (118)

我需要同步读取节点js中的Snort日志文件,并将它们解析为JSON数据,以便将它们存储在数据库中。问题是,Snort日志文件不仅仅是一个行。Snort中的警报由5行组成,我希望能够将这5行存储为数据库中的一个警报。

我试过用

     const rl = readline.createInterface({
            input: fs.createReadStream(LOG_FILE),
         });

         rl.on('line', (line) => {
         console.log(`Line from file: ${line}`);
         });

逐行读取文件并打印出来,但它只逐行打印出来,我不知道如何将它们组合在一起。

下面是一个Snort日志文件的示例:

[**] [1:1000001:1] ICMP test [**]
[Classification: Generic ICMP event] [Priority: 3] 
06/09-14:18:58.102020 192.168.137.91 -> 192.168.137.89
ICMP TTL:64 TOS:0x0 ID:20610 IpLen:20 DgmLen:84 DF
Type:8  Code:0  ID:1664   Seq:5  ECHO

因此,在我的数据库中,我将有一个叫做警告的东西,这5行将使用id:1发出警告,以此类推

提问于
用户回答回答于

收集变量中的行,然后在获得完整条目后执行一些操作。就像这样:

let lines = [];
rl.on('line', (line) => {
  lines.push(line);
  if (lines.length>=5) {
    let log = lines.splice(0,5).join('\n');
    console.log(log);
  }
});

扫码关注云+社区

领取腾讯云代金券