温馨提示×

Linux如何监控Nodejs日志

小樊
44
2026-08-02 14:17:18
栏目: 编程语言

在 Linux 上监控 Node.js 日志,常见做法取决于你日志的存储方式、运行方式(PM2 / Docker / systemd)以及监控需求(实时查看 / 错误告警 / 长期分析)。下面按从简单到专业给你一个完整指南。


一、最基础:直接查看日志文件

1️⃣ 使用 tail 实时查看

tail -f app.log

查看最后 200 行:

tail -n 200 app.log

✅ 适合:

  • 日志已写入文件
  • 临时排查问题

2️⃣ 使用 less(推荐)

less app.log

常用操作:

  • Shift + F:实时跟踪(类似 tail -f
  • /error:搜索 error
  • q:退出

✅ 适合:

  • 大文件
  • 需要搜索

二、Node.js 常见的日志来源

✅ 1. 控制台输出(stdout / stderr)

如果你直接运行:

node app.js

日志在终端,退出即消失 ❌

✅ 解决方案:重定向

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

✅ 2. PM2(强烈推荐)

查看日志

pm2 logs
pm2 logs app-name

实时查看:

pm2 logs --lines 100

查看错误日志

pm2 logs --err

日志位置

~/.pm2/logs/

✅ 优点:

  • 自动管理 stdout / stderr
  • 支持日志分割
  • 生产环境常用

三、使用 systemd 运行 Node.js

查看日志

journalctl -u node-app.service -f

查看最近 100 行:

journalctl -u node-app.service -n 100

✅ 适合:

  • 服务器级服务
  • 自动重启

四、Docker 中的 Node.js 日志

查看日志

docker logs -f container_id

查看最近 200 行

docker logs --tail 200 container_id

✅ 注意:

  • Node.js 日志应输出到 stdout
  • 不要写本地文件(Docker 推荐)

五、Node.js 内部日志监控(代码级)

1️⃣ 使用日志库(推荐)

Winston 示例

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('数据库连接失败');

2️⃣ 捕获未处理异常

process.on('uncaughtException', err => {
  console.error('未捕获异常:', err);
});

process.on('unhandledRejection', err => {
  console.error('Promise 未处理拒绝:', err);
});

六、高级监控方案(生产环境)

✅ 1. 实时监控 + 告警

工具 用途
ELK (Elasticsearch + Logstash + Kibana) 日志搜索、分析
Grafana + Loki 轻量级日志监控
Sentry JS 错误监控
Prometheus + Alertmanager 指标 + 告警

✅ 2. 日志切割(防止磁盘爆满)

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 日志规范
  • ✅ 给你一个 PM2 + Docker + ELK 的完整方案
  • ✅ 针对你现在的部署方式(PM2 / Docker / systemd)给具体命令

你现在是怎么跑 Node.js 的?

0