温馨提示×

nodejs linux日志如何排错

小樊
36
2026-10-05 12:50:15
栏目: 编程语言

在 Linux 上运行 Node.js 服务时,“排错”通常分为 看日志、定位问题、复现与分析、修复验证 几个阶段。下面按实战方式给你一套常用方法。


一、先看日志从哪里来

1. 应用自身日志

常见位置:

  • 项目里自己写的 log 文件(如 logs/app.log)
  • 使用 winston / pino / log4js 等

查看:

tail -f logs/app.log

2. 标准输出 / 错误(最常用)

Node.js 的 console.log / console.error 会输出到:

  • stdout
  • stderr

如果直接用命令启动:

node app.js

如果后台运行:

node app.js > app.out.log 2> app.err.log &

3. 系统服务日志(systemd)

如果是 systemd 启动的服务:

journalctl -u your-node-service -f

查看最近 100 行:

journalctl -u your-node-service -n 100

二、进程挂了 / 起不来怎么办

1. 直接前台运行看错误

node app.js

通常会直接打印:

  • 语法错误
  • 模块找不到
  • 端口被占用

2. 常见错误速查

错误 原因
EADDRINUSE 端口被占用
Cannot find module 依赖没装 / 路径错
SyntaxError 代码语法问题
ECONNREFUSED 数据库连接失败
ENOMEM 内存不足

三、进程在跑但有问题

1. 查看进程

ps aux | grep node

2. 查看端口

netstat -tunlp | grep node
# 或
ss -tunlp | grep 3000

3. CPU / 内存异常

top
# 或
htop

Node 内存泄漏常见表现:

  • 内存一直涨
  • 最后 heap out of memory

四、深入排错(进阶)

1. 打开 Node 调试日志

NODE_DEBUG=* node app.js

或只调试某模块:

NODE_DEBUG=net,http node app.js

2. 捕获未处理异常

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

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

3. 内存 / 性能分析

生成堆快照:

node --inspect app.js

用 Chrome DevTools 连接分析。


4. 日志级别控制

生产环境建议:

  • ERROR / WARN → 文件
  • DEBUG → 按需开启

例如:

LOG_LEVEL=debug node app.js

五、生产环境推荐做法

  • 用 pm2 管理
pm2 logs
pm2 monit
  • 日志集中化(ELK / Loki)
  • 不把错误吞掉
  • 不在生产 console.log 敏感信息

六、排错思路总结

  1. 先看错误在哪一层(系统 / 进程 / 应用)
  2. 前台跑一次
  3. 看 stdout / stderr / journalctl
  4. 复现问题
  5. 加日志 / 抓堆栈
  6. 定位到代码或依赖

如果你愿意,可以把:

  • 启动方式(pm2 / systemd / 直接 node)
  • 报错日志内容
  • Node 版本

发出来,我可以直接帮你具体分析。

0 踩