温馨提示×

linux中nodejs日志咋分析

小樊
33
2026-10-14 09:20:08
栏目: 编程语言

在 Linux 里分析 Node.js 日志,通常分 “日志在哪” → “怎么看” → “怎么分析/定位问题” 三步。下面按实战角度讲。


一、Node.js 日志一般在哪?

1️⃣ 控制台日志(最常见)

如果直接运行:

node app.js

日志默认输出到 stdout / stderr。

常见做法:

node app.js > app.log 2>&1

2️⃣ PM2 管理的 Node 服务

如果你用 PM2:

pm2 logs
pm2 logs appName
pm2 logs --lines 200

日志文件位置:

~/.pm2/logs/

3️⃣ 系统服务(systemd)

如果是 systemd 启动:

journalctl -u node-app.service -f
journalctl -u node-app.service --since "1 hour ago"

4️⃣ 应用自己写的日志文件

例如:

  • logs/error.log
  • logs/access.log
  • 使用 winston / pino / bunyan 等

二、基础查看命令(必会)

实时看日志

tail -f app.log

看最后 100 行

tail -n 100 app.log

搜索关键字(报错、ERROR)

grep ERROR app.log
grep -i "exception" app.log

查看某段时间日志

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

三、Node.js 常见错误怎么分析?

1️⃣ Error: Cannot find module

Error: Cannot find module 'express'

✅ 解决:

npm install

2️⃣ EADDRINUSE

Error: listen EADDRINUSE :::3000

✅ 查看谁占用了端口:

lsof -i:3000
# 或
netstat -tunlp | grep 3000

3️⃣ unhandledRejection / Uncaught Exception

UnhandledPromiseRejectionWarning

✅ 重点看:

  • 哪个接口
  • 哪个 async 函数
  • 是否没 catch

建议加:

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

4️⃣ 内存泄漏 / OOM

FATAL ERROR: Ineffective mark-compacts

✅ 分析:

node --inspect app.js

或用:

node --max-old-space-size=1024 app.js

四、高级分析方式

1️⃣ 日志结构化(强烈推荐)

用 pino 或 winston 输出 JSON:

{"level":"error","msg":"db timeout","pid":123}

分析:

jq '.msg' app.log

2️⃣ 按时间统计错误

grep ERROR app.log | awk '{print $1}' | sort | uniq -c

3️⃣ 性能 & 卡顿

  • top / htop
  • strace -p <pid>
  • lsof -p <pid>

五、推荐实践(生产环境)

✅ 使用 PM2 + 日志分割
✅ 日志级别分开(info / error)
✅ 不打印敏感信息
✅ 接入 ELK / Grafana Loki


如果你愿意,可以:

  • 贴一段 具体 Node 日志
  • 或说你用的是 PM2 / Docker / systemd

我可以直接帮你定位问题。

0 踩