温馨提示×

Nodejs日志Ubuntu怎么处理

小樊
42
2026-08-20 11:49:34
栏目: 编程语言

Ubuntu 上处理 Node.js 日志,通常从 日志输出方式、日志收集、日志切割、日志查看与监控 几个方面来做。下面给你一套实战常用方案,从简单到规范。


一、Node.js 日志输出方式(基础)

1️⃣ 使用 console.log / console.error(不推荐生产)

console.log('info');
console.error('error');

✅ 简单
❌ 无级别、无文件、难管理


2️⃣ 使用日志库(✅ 强烈推荐)

常用库:

特点
winston 最常用,支持多 transport
pino 高性能,JSON 日志
log4js 类似 Java log4j

✅ Winston 示例

npm install 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' })
  ]
});

logger.info('server start');
logger.error('db error');

二、Ubuntu 上的日志管理方案

方案一:直接写文件(最简单)

/var/log/myapp/
├── error.log
├── combined.log

✅ 简单
❌ 文件会无限增长


方案二:systemd + journald(✅ 推荐)

1️⃣ 使用 systemd 管理 Node.js

# /etc/systemd/system/myapp.service
[Unit]
Description=Node App
After=network.target

[Service]
ExecStart=/usr/bin/node /opt/myapp/app.js
Restart=always
StandardOutput=journal
StandardError=journal
User=ubuntu

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp

2️⃣ 查看日志

journalctl -u myapp -f

✅ 自动轮转
✅ 与系统日志统一
✅ 不需要自己写文件


方案三:PM2(Node.js 最常用)

1️⃣ 安装 PM2

npm install -g pm2
pm2 start app.js --name myapp

2️⃣ 查看日志

pm2 logs myapp
pm2 logs myapp --lines 100

3️⃣ 日志路径

~/.pm2/logs/

✅ 自动切割
✅ 重启、监控方便


三、日志切割(非常重要)

1️⃣ Ubuntu 自带 logrotate

示例配置

sudo vim /etc/logrotate.d/myapp
/var/log/myapp/*.log {
  daily
  rotate 7
  compress
  missingok
  notifempty
  copytruncate
}

✅ 防止磁盘爆满


2️⃣ PM2 自带日志分割

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

四、生产环境推荐组合 ✅

✅ 推荐方案 1(最常用)

Node.js + Winston
      ↓
PM2
      ↓
pm2-logrotate

✅ 推荐方案 2(系统级)

Node.js
      ↓
systemd
      ↓
journalctl

五、常见问题

❓日志太多怎么办?

  • 设置日志级别(info / warn / error)
  • 定期清理
  • 使用 JSON 日志 + ELK

❓要不要输出到 stdout?

Docker / systemd / PM2 场景:推荐

logger.add(new winston.transports.Console());

六、进阶(可选)

需求 方案
集中日志 ELK / Loki
实时分析 Grafana
报警 Sentry / Prometheus

如果你愿意,可以告诉我:

  • ✅ 是否是 生产环境
  • ✅ 是否用 Docker / PM2 / systemd
  • ✅ 日志量级(小 / 中 / 大)

我可以帮你 定制一套最合适的 Node.js 日志方案

0