如何从NodeJS中的文本文件提取(读取+删除)?

时间:2018-11-02 16:37:40

标签: javascript node.js

我正在构建一个脚本,该脚本读取日志文件,处理需要处理的内容,然后将其写入数据库

一些警告:

某些日志文件输入很多,每秒多次 某些日志文件很少甚至根本没有输入

我用简单的话尝试的内容:

读取文件的第一行,然后删除此行以转到下一行,而当我处理第一行时,可以添加其他行。

问题我正在面对

  1. 当我尝试读取文件然后对其进行处理,然后删除 文件,已添加一些行
  2. 当应用崩溃时, 由于某种原因一次处理多行,我不知道该怎么办 行已处理。

到目前为止已经尝试过

fs.readdir('logs/', (err, filenames) => {
filenames.forEach((filename) => {
  fs.readFile('logs/'+filename, 'utf-8', (err, content) => {

    //processing all new lines (can take multiple ms)

    //deleting file
    fs.unlink('logs/'+filename)
  });
});

});

是否没有一种(本机或非本机)方法来一次“取走”文件的第一行或获取所有行?

类似于Array.shift()方法对数组所做的事情。

2 个答案:

答案 0 :(得分:1)

如果您的日志文件已被写入为轮转日志。示例:每个小时都有每个日志文件9 AM.log、10AM.log....。处理日志文件时,可以跳过current文件并处理另一个文件。例如:现在是上午10:30,请跳过文件10 AM.log,解决另一个文件。

答案 1 :(得分:1)

为什么要一次读取文件。相反,您可以使用node.js streamshttps://nodejs.org/api/fs.html#fs_class_fs_readstream

这将读取文件并输出到控制台

var fs = require('fs');
var readStream = fs.createReadStream('myfile.txt');
readStream.pipe(process.stdout);

您也可以使用npm软件包node-tail来读取文件的内容,同时将新内容写入其中。 https://github.com/lucagrulla/node-tail