温馨提示×

Nodejs日志在Ubuntu如何存

小樊
43
2026-07-21 19:23:37
栏目: 编程语言

在 Ubuntu 上,Node.js 日志常见的存储方式主要有以下几种,从简单到规范,你可以按需求选择。


一、最简单:直接输出到文件(不推荐生产)

运行 Node.js 时把标准输出重定向:

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

或带日期:

node app.js >> logs/app-$(date +%Y-%m-%d).log 2>&1

❌ 缺点:

  • 不自动切割
  • 进程重启会覆盖或混乱
  • 不适合生产环境

二、使用日志库(推荐 ✅)

1️⃣ 常用日志库

特点
winston 最常用,支持多transport
pino 高性能,JSON日志
bunyan JSON日志,可读性好

2️⃣ Winston 示例(写入文件)

npm install winston
const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
    new winston.transports.File({ filename: 'logs/combined.log' })
  ]
});

logger.info('hello node log');

目录结构:

project/
├── logs/
│   ├── error.log
│   └── combined.log
└── app.js

✅ 优点:

  • 易管理
  • 可区分 error / info
  • 可扩展

三、Ubuntu 系统级日志(生产推荐 ✅✅)

方式一:使用 systemd + journald

1️⃣ 使用 systemd 管理 Node.js

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

[Service]
ExecStart=/usr/bin/node /var/www/app/app.js
WorkingDirectory=/var/www/app
Restart=always
StandardOutput=journal
StandardError=journal
User=ubuntu

[Install]
WantedBy=multi-user.target

启动:

sudo systemctl daemon-reload
sudo systemctl start nodeapp
sudo systemctl enable nodeapp

查看日志:

journalctl -u nodeapp -f

✅ 优点:

  • 自动管理
  • 系统级日志
  • 不怕崩溃

方式二:输出到 /var/log

new winston.transports.File({
  filename: '/var/log/node/app.log'
})

给权限:

sudo mkdir -p /var/log/node
sudo chown ubuntu:ubuntu /var/log/node

四、日志切割(非常重要 ⚠️)

使用 logrotate

sudo nano /etc/logrotate.d/nodeapp
/var/log/node/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0644 ubuntu ubuntu
}

测试:

sudo logrotate -d /etc/logrotate.d/nodeapp

✅ 防止磁盘被日志写满


五、Docker 场景(简单提一句)

如果是 Docker:

  • 日志输出到 stdout
  • 用 Docker log driver
  • 绑定宿主机目录
docker run -v /var/log/node:/app/logs app

六、推荐组合(最佳实践 ✅✅✅)

生产环境推荐方案:

  • Node.js + winston
  • 日志写入 /var/log/node/
  • 使用 systemd
  • 配置 logrotate

七、常见坑 ⚠️

问题 解决
日志越来越多 logrotate
权限不足 chown
PM2 日志乱 PM2 自带日志管理
磁盘爆满 限制日志大小

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

  • 是不是 生产环境
  • 是否使用 PM2 / Docker / systemd
  • Ubuntu 版本

我可以给你 一套完整可直接用的配置

0