温馨提示×

怎么定位nodejs日志异常

小樊
33
2026-10-20 02:57:10
栏目: 编程语言

定位 Node.js 日志异常通常可以从日志本身、运行环境、代码逻辑、系统资源几个层面入手。下面给你一套比较实用的排查思路和常用方法。


一、先明确“日志异常”是什么

常见情况包括:

  • 日志突然不打印了
  • 日志中频繁出现 Error / Uncaught Exception
  • 日志内容不完整或错乱
  • 日志量暴增
  • 日志中出现超时、内存溢出、连接失败

先确认是哪一种,再针对性排查。


二、从日志内容本身入手

1. 看错误堆栈(最重要)

Node.js 日志中通常会有:

Error: xxx
    at xxx (file.js:10:5)

重点看:

  • 错误类型(TypeError / RangeError / ECONNRESET)
  • 出错文件与行号
  • 调用链

2. 区分同步 / 异步错误

  • 同步错误:堆栈清晰
  • 异步错误(回调 / Promise):
    • 可能丢失上下文
    • 使用 async/await + try catch
    • 检查是否有未捕获的 Promise

三、检查 Node.js 运行时异常

1. 未捕获异常

确保有基础保护:

process.on('uncaughtException', (err) => {
  console.error('uncaughtException', err);
});

process.on('unhandledRejection', (reason) => {
  console.error('unhandledRejection', reason);
});

2. 查看退出码

echo $?

常见:

  • 1:普通错误
  • 137:内存不足(OOM)
  • 143:被 SIGTERM 杀掉

四、日志系统本身排查

1. 是否日志被“吞掉”

  • 使用了 console.log 但被重定向
  • 日志库(winston / pino)级别设置过高
  • 多进程下日志写错文件

2. 日志级别是否合理

logger.level = 'info';

检查是否:

  • 生产环境误设为 error
  • debug 日志泄漏导致性能问题

五、环境与依赖问题

1. 查看 Node 版本

node -v
  • 某些依赖对 Node 版本敏感
  • 老项目跑在新 Node 上容易异常

2. 依赖冲突

npm ls <package>

或

npm audit

六、系统层面排查

1. CPU / 内存

top
htop

2. 文件描述符

lsof -p <pid>

常见于:

  • 数据库连接未释放
  • 文件未关闭

3. 磁盘

df -h

日志写满磁盘会导致异常。


七、常用调试手段

1. 本地复现

NODE_ENV=development node app.js

2. 开启调试日志

DEBUG=* node app.js

3. 使用 Inspector

node --inspect app.js

八、推荐的最佳实践

  • 统一日志库(winston / pino)
  • 记录 requestId / traceId
  • 结构化日志(JSON)
  • 集中日志(ELK / Loki)
  • 监控 + 告警

如果你愿意,可以把具体的异常日志内容或报错信息贴出来,我可以帮你更精确地定位问题。

0 踩