温馨提示×

Nodejs日志Ubuntu如何配置

小樊
42
2026-07-10 03:45:03
栏目: 编程语言

Ubuntu 上配置 Node.js 日志,通常分为 应用层日志系统层日志 两部分。下面按常见场景给你一套完整、可落地的配置方案。


一、Node.js 应用层日志(最常见)

✅ 推荐方案:Winston + 日志文件

1️⃣ 安装 Winston

npm install winston

2️⃣ 示例配置(支持按日期切割)

const winston = require('winston');
const path = require('path');

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

// 开发环境额外输出到控制台
if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({
    format: winston.format.simple()
  }));
}

module.exports = logger;

3️⃣ 使用

const logger = require('./logger');

logger.info('服务启动');
logger.error('数据库连接失败');

二、日志按日期自动切割(生产推荐)

方案 1:winston-daily-rotate-file(最常用)

npm install winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');

const transport = new DailyRotateFile({
  dirname: 'logs',
  filename: 'application-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m',
  maxFiles: '14d'
});

logger.add(transport);

✅ 优点:

  • 自动按天切割
  • 自动清理旧日志
  • 非常适合 Ubuntu 服务器

三、Ubuntu 系统层日志(PM2 / systemd)

✅ 方式一:使用 PM2(强烈推荐)

1️⃣ 安装 PM2

npm install -g pm2

2️⃣ 启动应用

pm2 start app.js --name my-api

3️⃣ 查看日志

pm2 logs
pm2 logs my-api
pm2 logs my-api --lines 100

4️⃣ PM2 日志路径

~/.pm2/logs/

✅ PM2 自动管理:

  • stdout / stderr
  • 日志轮转(可配置)

5️⃣ PM2 日志切割

pm2 install pm2-logrotate

配置示例:

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

✅ 方式二:使用 systemd(Ubuntu 官方方式)

1️⃣ 创建服务文件

sudo nano /etc/systemd/system/node-app.service
[Unit]
Description=Node.js App
After=network.target

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

[Install]
WantedBy=multi-user.target

2️⃣ 启动服务

sudo systemctl daemon-reload
sudo systemctl start node-app
sudo systemctl enable node-app

3️⃣ 查看日志

journalctl -u node-app -f

✅ 优点:

  • 与 Ubuntu 深度集成
  • 自动日志管理(journald)

四、日志权限问题(Ubuntu 常见坑)

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

在代码中:

filename: '/var/log/node/app.log'

五、生产环境推荐组合 ✅

场景 推荐
Node 日志 winston + daily-rotate
进程管理 PM2
系统日志 journalctl
日志存储 /var/log/node

六、快速选方案

新手 / 小项目

  • PM2 + console.log

生产环境

  • Winston + daily-rotate + PM2

企业级

  • Winston + systemd + journald

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

  • 是否使用 PM2 / Docker / systemd
  • 是否部署在 云服务器
  • 是否需要 ELK / 日志收集

我可以帮你定制一套 完整 Node.js 日志架构

0