在 Linux 下分析 Node.js 日志,通常取决于日志来源、格式和你的分析目的。下面按“常见场景 → 工具 → 实战示例”给你一个系统性的指南。
console.log / console.error/var/log/syslogjournalctlcat / less / tail# 实时查看日志
tail -f app.log
# 查看最后 500 行
tail -n 500 app.log
grep(最常用)# 查找错误
grep -i error app.log
# 查找某个接口
grep "/api/login" app.log
# 统计错误数量
grep -c "Error" app.log
awk(字段分析)# 统计每分钟请求数
awk '{print $1, $2}' app.log | sort | uniq -c
sed(日志清洗)# 删除包含 DEBUG 的日志
sed -i '/DEBUG/d' app.log
如果你用的是 pino / winston json 格式:
# 格式化 JSON
cat app.log | jq .
# 查找 level 为 error 的日志
cat app.log | jq 'select(.level == 50)'
# 统计错误类型
cat app.log | jq -r '.err.message' | sort | uniq -c
✅ 建议:生产环境强烈推荐 JSON 日志
sed -n '/2026-01-20 10:00/,/2026-01-20 11:00/p' app.log
awk '{print substr($0,1,16)}' app.log | sort | uniq -c
pm2 logs
pm2 logs app --lines 200
pm2 logs app --err
合并分析:
pm2 logs --json | jq .
如果 Node.js 是 systemd 服务:
journalctl -u node-app.service -f
journalctl --since "2026-01-20 10:00" --until "11:00"
grep -i "uncaughtException\|SIGTERM\|ENOMEM" app.log
grep "duration" app.log | awk '{if ($5 > 1000) print}'
grep "/api" app.log | awk '{print $7}' | sort | uniq -c | sort -nr
grep "Error" app.log | awk '{print $0}' | sort | uniq -c | sort -nr | head -10
适合:
✅ 统一格式(JSON)
✅ 包含字段:
{
"time": "2026-01-20T10:00:00Z",
"level": "error",
"pid": 1234,
"reqId": "abc",
"msg": "DB connection failed"
}
✅ 区分 stdout / stderr
✅ 不要只依赖 console.log
1. tail -f app.log
2. grep -i error
3. 看是否有 OOM / uncaughtException
4. 按时间段定位
5. 用 jq 分析 JSON 日志
如果你愿意,可以:
我可以直接帮你写针对性的分析命令。