在 Node.js 里“统计日志行数”一般有几种常见场景,不同场景下做法不一样。下面按 最常用 → 进阶 给你总结几种方法。
wc -l(推荐,最快)如果你的日志是 文件(如 app.log、error.log):
wc -l app.log
输出示例:
12345 app.log
只想要数字:
wc -l < app.log
✅ 优点:
const fs = require('fs');
const content = fs.readFileSync('app.log', 'utf-8');
const lines = content.split('\n').length;
console.log('日志行数:', lines);
⚠️ 注意:
适合 大日志文件
const fs = require('fs');
let lineCount = 0;
const stream = fs.createReadStream('app.log', {
encoding: 'utf8'
});
stream.on('data', (chunk) => {
for (let i = 0; i < chunk.length; i++) {
if (chunk[i] === '\n') {
lineCount++;
}
}
});
stream.on('end', () => {
console.log('日志行数:', lineCount);
});
✅ 优点:
如果你是想 统计当前程序正在产生的日志行数,最好是在日志模块里埋点。
例如:
let logCount = 0;
function log(msg) {
console.log(msg);
logCount++;
}
log('hello');
log('world');
console.log('日志行数:', logCount);
grep "2024-01-01" app.log | wc -l
或按小时:
grep "2024-01-01 10:" app.log | wc -l
grep "ERROR" app.log | wc -l
grep -E "INFO|WARN|ERROR" app.log | wc -l
| 日志库 | 建议方式 |
|---|---|
| winston | hook stream 或 transport |
| pino | 直接统计日志文件 |
| log4js | 统计输出文件 |
✅ 不建议在日志库内部统计行数,而是统计文件或输出流。
| 场景 | 推荐方式 |
|---|---|
| 已存在的日志文件 | wc -l |
| Node.js 中大文件 | stream |
| 实时统计 | 日志写入时计数 |
| 按时间/级别 | grep + wc |
| 生产环境 | 文件 + shell |
如果你愿意,可以告诉我:
我可以给你一个 完全贴合你项目的方案。