温馨提示×

如何定位nodejs linux日志问题

小樊
46
2026-09-08 13:58:28
栏目: 编程语言

在 Linux 上定位 Node.js 日志问题,通常可以按下面几个层次来做:先看进程状态 → 再找日志来源 → 分析日志内容 → 必要时加诊断手段


一、确认 Node.js 进程是否在运行

ps -ef | grep node
# 或
pgrep -af node

如果是用 PM2 / Docker / systemd 启动的:

pm2 list
docker ps
systemctl status your-node-service

二、找到日志在哪里

1. 应用自己写的日志

常见位置:

/var/log/your-app/
./logs/
~/logs/

看代码里是否用了:

  • console.log
  • winston
  • pino
  • log4js

2. PM2 日志

pm2 logs
pm2 logs app-name
# 日志文件
~/.pm2/logs/

3. systemd 日志

journalctl -u your-node-service -f
journalctl -u your-node-service --since "10 min ago"

4. Docker 日志

docker logs -f container_id
docker logs --tail 200 container_id

5. Nginx / 反向代理日志(如果有)

/var/log/nginx/access.log
/var/log/nginx/error.log

三、实时查看日志(排障常用)

tail -f app.log
tail -n 500 app.log | less
grep -i error app.log
grep -i "uncaught" app.log

按时间过滤:

sed -n '/2026-01-21 10:00/,/2026-01-21 10:30/p' app.log

四、常见 Node.js 日志问题 & 定位方法

1. 进程 crashed 但没日志

检查:

  • 是否未捕获异常
process.on('uncaughtException', e => {
  console.error('uncaught', e);
});
process.on('unhandledRejection', e => {
  console.error('unhandledRejection', e);
});
  • 是否被 systemd / PM2 重启

2. CPU / 内存异常

top -p $(pgrep node)
# 或
htop

Node 内部:

node --inspect

配合 Chrome DevTools 看 CPU / 内存。


3. 请求无响应但没报错

  • 看 access log 是否有请求
  • 看是否卡在数据库 / 外部 API
  • 打开 debug 日志:
DEBUG=* node app.js

4. 日志太多找不到重点

按级别过滤:

grep -E "ERROR|WARN" app.log

结构化日志(pino / winston json):

jq 'select(.level=="error")' app.log

五、推荐的标准做法(避免踩坑)

  1. 统一日志库(不要只用 console)
  2. 日志分级(info / warn / error)
  3. 记录关键上下文(requestId、userId)
  4. 异常必须捕获并记录
  5. 生产环境用 PM2 / systemd + 日志轮转

日志轮转示例(logrotate):

/var/log/node-app/*.log {
  daily
  rotate 14
  compress
  missingok
  notifempty
}

六、快速排查 checklist

  • [ ] 进程是否活着
  • [ ] 日志文件在哪
  • [ ] 最近 error / exception
  • [ ] 是否有 OOM / crash
  • [ ] 是否外部依赖超时
  • [ ] 是否磁盘写满
df -h

如果你愿意,可以告诉我:

  • 你是用 PM2 / Docker / systemd / 裸 node 启动的?
  • 日志是 console / winston / pino
  • 具体现象(崩溃 / 无日志 / 请求异常)

我可以直接帮你给一套针对性的排查命令

0