在Debian系统上使用Node.js时,查找日志中的慢查询可以通过以下步骤实现:
fs)模块按行读取日志文件。可以通过前端选择的日志查找时间和精确度来进行查找。以下是一个简单的Node.js脚本示例,用于读取和过滤日志文件:
const fs = require('fs'); const readline = require('readline'); function readLog(date, type, operation) { const logPath = `appDirName/log/ivsvr_${date}.log`; const logStr = ''; fs.stat(logPath, function (err, stats) { if (err) { console.log('无日志信息可供查看'); return; } let lineCount = 0; const fReadName = logPath; const fRead = fs.createReadStream(fReadName); const objReadline = readline.createInterface({ input: fRead }); objReadline.on('line', (line) => { const itemStr = line.trim(); const time = itemStr.slice(0, 19); const content = itemStr.substr(20); if (!time || !content) return; lineCount++; switch (type) { case '0': // 查找所有日志 break; case '1': // 按小时过滤 if (time.slice(0, 2) === hour) { matched = true; } else { matched = false; } break; case '2': // 按分钟过滤 if (time.slice(0, 5) === minute) { matched = true; } else { matched = false; } break; case '3': // 按秒过滤 if (time.slice(0, 8) === second) { matched = true; } else { matched = false; } break; default: console.log('unknown type!'); break; } if (matched && lineCount <= logReadFlag) { const itemArr = itemStr.split(' '); const logDate = itemArr[0]; const logTime = itemArr[1]; const result = itemArr[2]; if (result === 'err') { const operation = itemArr[4]; result = `失败: ${itemArr[5]} (${itemArr[6] || ''})`; } else { const operation = itemArr[4] + ' ' + itemArr[5](itemArr[6] || ''); result = '成功'; } logStr += `<tr><td>${logTime}</td><td>${operation}</td><td>${result}</td></tr>`; } }); objReadline.on('close', () => { if (lineCount <= logReadFlag && logStr) { console.log(logStr); } else if (logReadFlag === 0 && logStr) { console.log('刷新成功,更新了' + lineCount + '条日志!'); } else { console.log('刷新成功,无日志更新!'); } }); }); } // 示例调用 readLog(new Date().toISOString().slice(0, 10), '1', 'search'); 请注意,上述代码仅为示例,实际应用中可能需要根据具体的日志格式和需求进行调整。此外,为了提高性能,可以考虑使用流式处理和异步操作来处理大型日志文件。