下面从常见原因 → 排查方法 → 优化方案三个层次,系统讲一下 Node.js 日志相关的性能问题分析与解决。
fs.writeFileSync、console.log(在某些环境下)✅ 典型症状:
JSON.stringify后果:
logger.info(`user=${JSON.stringify(user)}`)
setInterval(() => {
const start = Date.now();
setImmediate(() => {
const delay = Date.now() - start;
if (delay > 50) console.warn('Event Loop blocked', delay);
});
}, 1000);
node --trace-warnings
node --diagnostics-channel
clinic.js0xperf(Linux)lsof | grep log常见库性能排序(一般):
pino > winston(buffered) > bunyan > console
Pino(最快)
const pino = require('pino');
const logger = pino({ level: 'info' });
logger.info({ user: id }, 'user login');
优点:
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug'
❌ 错误:
logger.debug(`data=${JSON.stringify(data)}`)
✅ 正确:
logger.debug({ data }, 'debug data')
pino-rotatewinston-daily-rotate-filelogrotate(系统级)推荐:
pino + pino-syslog❌ 不推荐:
pino({ transport: { target: 'pino/file', options: { destination: 1 } } })
✅ 原则:
✅ 推荐组合:
Pino + 文件 + 轮转 + ELK / Loki
winston vs pino你可以直接贴:
「我现在用的日志库 + 一段日志代码 + QPS / 延迟情况」