readline读取文件流的问题
readline 读取数据流的过程中 文件被mv重新生成了 然后我使用了start 和end参数 会出错么 需求是这样的:日志收集系统会在每小时开始的时候把日志mv改名 我需要每小时解析一次日志的数据。但是如果我解析的时候是从每小时的30分钟开始的,那么我解析时候比如是50分,那后十分钟的数据是不是就缺失了,但是如果解析从50分以后开始这样,到整点了,日志被mv走了,我还是会缺一些数据。有什么好办法呢
//将stream给readLine流处理
var objReadline = readLine.createInterface({
input: fs.createReadStream(log_path, {start: parseInt(start_Bytes), end: parseInt(end_Bytes)})
});
objReadline.on('line', function (line) {
pipeLine(line);
if(index== CONFIG.log_public_max){
objReadline.removeAllListeners('line');
}
index++;
}).on('close', function () {
redis.set(cahce_seek_index, end_Bytes);
redis.expire(pub_queue_android_key,3600);
redis.expire(pub_queue_ios_key,3600);
console.log("[" + utils.getDatetimeNow() + '] 作业完成,此次任务解析日志行数:' + index);
callback(null, true);
});
2 回复
日志被 mv 是指移到其他地方了,还是删除了?如果是移到其他地方了,并且对日志的实时性要求不高的,可以考虑读取 mv 后的那个日志文件
@zbinlin 到其他地方了 ,我决定还是每次读取上一个小时的日志文件,那样应该没有中途被移走的问题