温馨提示×

Nodejs日志Ubuntu怎么设置

小樊
32
2026-08-20 11:39:33
栏目: 编程语言

在 Ubuntu 上设置 Node.js 日志,常见做法有 系统级日志(systemd / journald)应用内日志(Winston / Pino)、以及 日志文件 + 轮转(logrotate)。下面按使用场景给你一套完整方案。


一、最简单:直接输出日志(适合开发)

Node.js 默认会把日志输出到 stdout / stderr:

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

在 Ubuntu 上运行:

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

⚠️ 缺点:进程重启、崩溃时日志容易丢失。


二、使用 systemd 管理 Node.js(推荐生产环境)

1️⃣ 创建 systemd 服务

sudo nano /etc/systemd/system/nodeapp.service

内容示例:

[Unit]
Description=Node.js App
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/app
ExecStart=/usr/bin/node /home/ubuntu/app/app.js
Restart=always
StandardOutput=journal
StandardError=journal
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

2️⃣ 启动并设置开机自启

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

3️⃣ 查看日志

journalctl -u nodeapp -f

✅ 优点:

  • 自动重启
  • 日志由 journald 管理
  • 支持按时间、服务查询

三、Node.js 应用内日志(Winston / Pino)

✅ 使用 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('应用启动');
logger.error('出错了');

日志文件位置:

/home/ubuntu/app/combined.log

四、日志轮转(非常重要)

Ubuntu 自带 logrotate,防止日志把磁盘写满。

1️⃣ 创建 logrotate 配置

sudo nano /etc/logrotate.d/nodeapp

示例:

/home/ubuntu/app/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

2️⃣ 测试

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

五、PM2(如果你用 PM2)

查看日志

pm2 logs
pm2 logs app --lines 100

日志配置

pm2 start app.js --log /var/log/nodeapp.log

PM2 自带日志管理,但生产环境更推荐 systemd + journald


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

生产环境

systemd + journald + Winston + logrotate

开发环境

console.log / Winston

七、常见问题

日志时间不对?

winston.format.timestamp()

日志太多?

  • 设置日志级别(info / warn / error)
  • 使用 Pino(性能更好)

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

  • ✅ 是否用 PM2 / Docker / systemd
  • ✅ Ubuntu 版本
  • ✅ 日志想存文件还是 systemd

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

0