在 Linux 上监控 Node.js 日志,常见做法取决于你日志的存储方式、运行方式(PM2 / Docker / systemd)以及监控需求(实时查看 / 错误告警 / 长期分析)。下面按从简单到专业给你一个完整指南。
tail 实时查看tail -f app.log
查看最后 200 行:
tail -n 200 app.log
✅ 适合:
less(推荐)less app.log
常用操作:
Shift + F:实时跟踪(类似 tail -f)/error:搜索 errorq:退出✅ 适合:
如果你直接运行:
node app.js
日志在终端,退出即消失 ❌
✅ 解决方案:重定向
node app.js > app.log 2>&1
pm2 logs
pm2 logs app-name
实时查看:
pm2 logs --lines 100
pm2 logs --err
~/.pm2/logs/
✅ 优点:
journalctl -u node-app.service -f
查看最近 100 行:
journalctl -u node-app.service -n 100
✅ 适合:
docker logs -f container_id
docker logs --tail 200 container_id
✅ 注意:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('服务启动');
logger.error('数据库连接失败');
process.on('uncaughtException', err => {
console.error('未捕获异常:', err);
});
process.on('unhandledRejection', err => {
console.error('Promise 未处理拒绝:', err);
});
| 工具 | 用途 |
|---|---|
| ELK (Elasticsearch + Logstash + Kibana) | 日志搜索、分析 |
| Grafana + Loki | 轻量级日志监控 |
| Sentry | JS 错误监控 |
| Prometheus + Alertmanager | 指标 + 告警 |
pm2 install pm2-logrotate
或 logrotate:
/var/log/node/*.log {
daily
rotate 7
compress
missingok
}
# 查看错误日志
grep -i error app.log
# 查看最近 500 行
tail -n 500 app.log
# 实时监控
tail -f app.log
# 查看 Node 进程
ps aux | grep node
| 场景 | 推荐 |
|---|---|
| 本地开发 | console.log + tail -f |
| 生产服务 | PM2 + Winston |
| 容器环境 | Docker logs + stdout |
| 服务器级 | systemd + journalctl |
| 企业级 | ELK / Loki |
如果你愿意,我可以:
你现在是怎么跑 Node.js 的?