
Node.jsreadline模块 完整使用教程readline是Node.js 内置核心模块无需安装直接require即可使用核心作用逐行读取流数据日志文件、命令行输入、大文件读取必备完美解决大文件一次性加载内存溢出问题。下面给你最常用、最实用的用法直接复制就能跑。一、最核心逐行读取日志文件高频用法处理日志文件90% 场景都用这个constfsrequire(fs);constreadlinerequire(readline);// 1. 创建 readline 实例constrlreadline.createInterface({input:fs.createReadStream(app.log),// 读取文件流crlfDelay:Infinity// 兼容 Windows/Linux 所有换行符必加});// 2. 监听每一行数据rl.on(line,(lineStr){// lineStr 就是日志的每一行在这里做解析/过滤/处理console.log(读取到一行,lineStr);});// 3. 文件读取完毕rl.on(close,(){console.log(文件读取完成);});关键事件说明事件名作用line每次读取到一行时触发close读取完毕/停止时触发error发生错误时触发二、进阶用法命令行交互输入输出readline也可以做控制台问答工具比如让用户输入内容constreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,// 控制台输入output:process.stdout// 控制台输出});// 提问rl.question(请输入日志文件名,(answer){console.log(你输入的是,answer);// 用完必须关闭rl.close();});三、处理大日志文件防止内存爆炸大文件1GB以上日志绝对不能用 readFile必须用readline流式读取constfsrequire(fs);constreadlinerequire(readline);letlineCount0;constrlreadline.createInterface({input:fs.createReadStream(big.log),crlfDelay:Infinity});rl.on(line,(line){lineCount;// 逐行解析日志比如只看错误日志if(line.includes(ERROR)){console.log(错误日志,line);}});rl.on(close,(){console.log(总行数${lineCount});});四、常用 API 速查背会这几个就够1. 创建实例constrlreadline.createInterface(options)2. 监听行rl.on(line,(line){})3. 关闭实例rl.close()4. 暂停/恢复读取rl.pause()// 暂停rl.resume()// 恢复五、完整实战解析 Nginx/应用日志constfsrequire(fs);constreadlinerequire(readline);constrlreadline.createInterface({input:fs.createReadStream(app.log),crlfDelay:Infinity});// 正则解析日志示例constlogReg/(\d{4}-\d{2}-\d{2}) \[(\w)\] (.*)/;rl.on(line,(line){constresline.match(logReg);if(res){const[,time,level,msg]res;console.log({time,level,msg});}});rl.on(close,(){console.log(解析完成);});六、重要注意事项避坑必须处理close读取完成后释放资源大文件必须用流fs.createReadStreamreadline是标准方案crlfDelay: Infinity兼容所有系统换行符一定要加不要在 line 事件里写同步阻塞代码会拖慢读取速度错误处理生产环境建议加error事件监听总结require(readline)就记住3 个核心点逐行读取on(line)是灵魂搭配文件流fs.createReadStream处理大文件日志解析神器Node.js 处理日志文件的标准方案需要我给你写一个可直接用于生产环境的日志解析工具类吗