定位 Node.js 日志异常,通常可以按“看现象 → 找日志 → 定位代码 → 复现/验证”的思路进行。下面给你一套比较实用的方法论和工具清单。
Node.js 日志异常常见有几类:
uncaughtExceptionunhandledRejectionprocess.on('uncaughtException', (err) => {
console.error('uncaughtException', err);
});
process.on('unhandledRejection', (reason) => {
console.error('unhandledRejection', reason);
});
至少能知道“死在哪”
不要用 console.log 裸打:
✅ 推荐:
winstonpino(性能最好)bunyan示例(pino):
const pino = require('pino');
const logger = pino();
logger.error({ err }, 'request failed');
日志里应包含:
timestamplevelrequestIderr.stackrequestId: abc123
工具:
cls-hookedasync_hooks这样你可以:
grep abc123 app.log
直接看完整调用链。
grep -E "ERROR|FATAL" app.log
重点看:
requestId → userId → 接口 → 参数
node --inspect
用 Chrome DevTools:
node --abort-on-uncaught-exception
生成 core dump 后用:
lldbgdbSentry 能直接给你:
| 现象 | 真实原因 |
|---|---|
| 日志突然没了 | 异步异常未 catch |
| 日志重复 | 多次初始化 logger |
| 日志时间错 | 时区配置错误 |
| 日志爆量 | 循环里打日志 |
如果你愿意,可以把:
发给我,我可以帮你具体定位。