温馨提示×

Ubuntu Nodejs日志如何分析

小樊
44
2026-07-10 03:26:59
栏目: 编程语言

在 Ubuntu 上分析 Node.js 日志,通常分为 日志来源定位 → 查看方式 → 过滤/统计 → 问题定位 → 进阶分析 几个步骤。下面按最常见的场景给你一个完整指南。


一、确定 Node.js 日志在哪

1. 应用自身输出(最常见)

Node.js 默认日志输出位置取决于启动方式:

启动方式 日志位置
直接运行 stdout / stderr
systemd journalctl
PM2 ~/.pm2/logs/
Docker docker logs
nginx 反向代理 /var/log/nginx/

2. systemd 服务方式(最常见于生产)

journalctl -u your-node-service-name -f

查看历史:

journalctl -u your-node-service-name --since "2025-01-01" --until "2025-01-02"

3. PM2(非常常见)

查看日志目录:

pm2 logs

只看 error:

pm2 logs --err

查看指定应用:

pm2 logs app-name

日志路径:

~/.pm2/logs/

4. Docker

docker logs <container_id>
docker logs -f <container_id>

二、实时查看日志

tail -f /path/to/log.log

PM2:

pm2 logs --lines 100

systemd:

journalctl -u your-service -f

三、快速过滤关键信息

1. 查找错误

grep -i error app.log
grep -i exception app.log

2. 按时间过滤

grep "2025-01-20 10:" app.log

3. 统计错误数量

grep -i error app.log | wc -l

四、分析 Node.js 常见错误

1. 崩溃 / 重启

常见日志:

Error: Cannot find module
listen EADDRINUSE
FATAL ERROR: Ineffective mark-compacts

重点看:

  • uncaughtException
  • unhandledRejection
  • ENOMEM
  • SIGKILL

2. 内存泄漏

关注:

  • heap out of memory
  • RSS 持续增长
  • GC 频繁

配合:

node --inspect

3. 请求异常

如果是 HTTP 服务,重点看:

  • 状态码(404 / 500)
  • 响应时间
  • 请求路径

五、结构化日志分析(推荐)

1. JSON 日志(最佳实践)

Node.js 中输出:

console.log(JSON.stringify({
  level: 'error',
  time: new Date().toISOString(),
  message: 'DB connection failed'
}));

分析:

jq . app.log

过滤 error:

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

六、使用日志分析工具(生产推荐)

1. 轻量

  • lnav(强烈推荐)
sudo apt install lnav
lnav /var/log/app.log

2. 中大型系统

  • ELK(Elasticsearch + Logstash + Kibana)
  • Grafana Loki
  • Fluent Bit

七、Node.js 日志最佳实践(避免踩坑)

✅ 使用日志库

  • winston
  • pino(性能最好)

✅ 区分环境

  • dev:console
  • prod:文件 + 结构化

✅ 不要只 console.log

  • 没有级别
  • 不好过滤
  • 无法持久化

八、快速排查流程(实战)

# 1. 看最近日志
tail -n 200 app.log

# 2. 查找错误
grep -i error app.log

# 3. 看 crash 前最后 50 行
tail -n 50 app.log | less

# 4. 看系统资源
dmesg | grep -i kill
free -h

如果你愿意,可以直接把 一段 Node.js 日志贴出来,我可以帮你 精准分析是哪一类问题(内存 / 请求 / 代码 / 系统)

0