定位 Node.js 日志异常,通常可以按**“从现象到根因”**的思路分层排查。下面给你一套比较实用的方法和流程。
先区分异常类型,定位方向完全不同:
throw 未捕获异常unhandledRejectionNode.js 异常一定会带堆栈:
node app.js
# 或
pm2 logs
重点看:
生产环境一定要加:
process.on('uncaughtException', (err) => {
console.error('uncaughtException', err);
});
process.on('unhandledRejection', (reason) => {
console.error('unhandledRejection', reason);
});
否则异常会“莫名其妙消失”。
避免 console.log 满天飞,推荐:
winstonpinolog4js示例(pino):
logger.error({ err }, 'request failed');
日志里至少包含:
timestampleveltraceIduserId / requestIderr.stack步骤:
requestId 串联日志工具:
node --inspect app.js
或:
node --max-old-space-size=512 app.js
排查:
EventEmitter)典型问题:
catchasync 函数没 await定位方式:
process.on('unhandledRejection', e => console.error(e));
检查:
clinic.js0xnode --profkubectl logs pod-name
docker logs container-id
如果你愿意,可以直接贴一段 Node.js 错误日志或代码,我可以帮你具体定位是哪里出了问题。