我正在构建一个脚本,该脚本读取日志文件,处理需要处理的内容,然后将其写入数据库
某些日志文件输入很多,每秒多次 某些日志文件很少甚至根本没有输入
读取文件的第一行,然后删除此行以转到下一行,而当我处理第一行时,可以添加其他行。
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()方法对数组所做的事情。
答案 0 :(得分:1)
如果您的日志文件已被写入为轮转日志。示例:每个小时都有每个日志文件9 AM.log、10AM.log....。处理日志文件时,可以跳过current
文件并处理另一个文件。例如:现在是上午10:30,请跳过文件10 AM.log,解决另一个文件。
答案 1 :(得分:1)
为什么要一次读取文件。相反,您可以使用node.js streams
。
https://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