readline读取文件流的问题
发布于 8 年前 作者 ntfs32 4007 次浏览 来自 问答

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 到其他地方了 ,我决定还是每次读取上一个小时的日志文件,那样应该没有中途被移走的问题

回到顶部