温馨提示×

nodejs日志错误怎么排查

小樊
40
2026-09-24 19:56:32
栏目: 编程语言

在 Node.js 中排查日志和错误,通常可以按下面这套思路来,从看日志 → 定位错误 → 复现 → 修复 → 防止逐步进行。


一、先搞清楚“日志从哪里来”

1. 控制台日志

  • console.log / info / warn / error
  • 最直接,但生产环境不建议大量使用

2. 框架/工具日志

  • Express / Koa:请求日志、中间件报错
  • PM2:pm2 logs
  • Docker:docker logs <container>
  • Nginx(反向代理):访问/错误日志

3. 日志文件

常见位置:

  • logs/
  • /var/log/
  • 使用 Winston / Pino / Bunyan 等日志库

二、读懂错误信息(最关键)

一个典型 Node.js 错误:

TypeError: Cannot read properties of undefined (reading 'id')
    at getUser (/app/user.js:12:20)
    at /app/server.js:30:5

重点关注:

  1. 错误类型
    • TypeError:类型不对
    • ReferenceError:变量未定义
    • SyntaxError:语法错误
  2. 错误描述
  3. 调用栈(stack)
    • 从下往上看:最上面是出错位置

三、常见错误 & 排查方式

1. 未捕获异常

process.on('uncaughtException', err => {
  console.error('未捕获异常', err);
});

2. Promise 未处理

process.on('unhandledRejection', err => {
  console.error('未处理的 Promise', err);
});

✅ 建议:

  • 所有异步用 async/await + try catch
  • 不要用裸 .then()

3. 接口报错(Express 示例)

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('服务器错误');
});

排查:

  • 看请求 URL / 参数
  • 看是否数据库/第三方接口超时

4. 内存泄漏 / CPU 高

工具:

node --inspect

或:

pm2 monit

常见原因:

  • 全局变量乱用
  • 定时器未清除
  • 大对象未释放

四、日志排查实战步骤

✅ 标准排查流程

  1. 收集日志
    pm2 logs
    
  2. 定位时间点
    • 错误发生时间
    • 请求 ID(如有)
  3. 看调用栈
  4. 本地复现
    • 用相同参数请求
  5. 加日志
    console.log('userId=', userId);
    
  6. 修复并验证

五、推荐日志最佳实践

使用日志库(不要只用 console)

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  transports: [new winston.transports.File({ filename: 'app.log' })]
});

日志内容建议

  • 时间
  • 环境(dev/prod)
  • 用户 ID
  • 请求 ID
  • 错误 stack

六、如果你愿意,我可以直接帮你看

你可以贴:

  • 错误日志(完整 stack)
  • 相关代码
  • Node / 框架版本

我可以直接帮你精确定位问题原因和修复方式。

0 踩