在 Ubuntu 上分析 Node.js 日志,通常分为日志来源确认 → 收集方式 → 分析工具 → 实战排查几个步骤。下面给你一套实用指南。
console.log / console.errorwinstonpino(性能最好)bunyan示例(pino):
const pino = require('pino')
const logger = pino({ level: 'info' })
logger.info({ user: 1 }, 'user login')
pm2 logs
pm2 logs app-name
pm2 logs --lines 100
日志文件位置:
~/.pm2/logs/
如果你用 systemd 启动 Node:
journalctl -u your-node-service
journalctl -u your-node-service -f
journalctl -u your-node-service --since "10 min ago"
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/syslog
dmesg
tail -f app.log
grep -i error app.log
grep -C 5 "ECONNRESET" app.log
grep "Error" app.log | wc -l
awk '$1 >= "2026-01-21 10:00" && $1 <= "2026-01-21 11:00"' app.log
如果是 JSON 日志(如 pino):
cat app.log | jq 'select(.level == 50)'
按用户统计错误:
cat app.log | jq -r '.user' | sort | uniq -c
journalctl -u node-app -p err
journalctl -u node-app --since today
示例 /etc/logrotate.d/node-app:
/var/log/node/*.log {
daily
rotate 14
compress
missingok
notifempty
}
| 工具 | 用途 |
|---|---|
| ELK | 日志搜索、告警 |
| Grafana + Loki | 轻量日志系统 |
| Datadog | SaaS 监控 |
| Sentry | 错误追踪(推荐) |
node --inspect
配合:
pm2 monit
确保:
process.on('uncaughtException', e => {
logger.error(e)
})
pino-http✅ 用 systemd 启动
✅ 用 pino + JSON 日志
✅ 日志输出到 stdout
✅ 用 journald / Loki 收集
✅ 不上报敏感信息
如果你愿意,可以告诉我:
我可以直接帮你写分析命令或配置模板。