在 Ubuntu 上分析 Node.js 日志,通常取决于日志是如何产生的(console、文件、PM2、Docker、systemd 等)。下面按常见场景给你一个完整、实用的分析指南。
node app.js
✅ 常见做法:
node app.js > app.log 2>&1
如果你用 PM2 管理 Node.js:
pm2 logs
pm2 logs app-name
PM2 日志默认位置:
~/.pm2/logs/
常见文件:
app-name-out.logapp-name-error.log如果是 systemd 启动的 Node.js:
journalctl -u your-node-service
journalctl -u your-node-service -f
查看实时日志:
journalctl -u your-node-service -f --since "5 min ago"
docker logs container_id
docker logs -f container_id
tail -f app.log
PM2:
pm2 logs --lines 100
grep -i error app.log
grep -i "exception" app.log
按时间:
grep "2026-01-21" app.log
tail -n 200 app.log
grep -c "Error" app.log
如果是 HTTP 日志:
grep "POST /api" app.log
grep "500" app.log
示例:
{"level":"error","message":"DB failed","stack":"..."}
分析方式:
jq . app.log
jq 'select(.level=="error")' app.log
推荐:
示例(Winston):
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
适合生产环境
grep -i "uncaughtException" app.log
journalctl -u node-app --since today
grep -i "heap" app.log
配合:
node --inspect
grep "duration" app.log
| 场景 | 命令 |
|---|---|
| 实时日志 | tail -f / pm2 logs |
| 报错 | grep -i error |
| systemd | journalctl -u |
| Docker | docker logs |
| JSON 日志 | jq |
你可以直接告诉我:
我可以给你针对性的分析命令和排查方案。