温馨提示×

ubuntu nodejs日志怎么轮转

小樊
38
2026-09-03 11:07:57
栏目: 编程语言

在 Ubuntu 上,Node.js 本身不会自动做日志轮转(log rotation),通常需要借助系统工具或 Node 生态里的库来实现。下面按常见做法从简单到生产级给你讲清楚。


一、最推荐:使用系统 logrotate(生产环境标准做法)

1️⃣ 原理

  • Node.js 直接写日志文件(如 app.log
  • logrotate 按天 / 大小切割、压缩、删除旧日志
  • 不需要改 Node 代码

2️⃣ 示例配置

创建配置文件:

sudo nano /etc/logrotate.d/node-app

内容示例:

/var/log/node-app/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    copytruncate
}

3️⃣ 关键参数说明

参数 作用
daily 每天轮转
rotate 14 保留 14 份
compress 压缩旧日志
copytruncate 不重启 Node,直接截断日志(很重要)

copytruncate 是 Node 应用最常用方式

4️⃣ 测试配置

sudo logrotate -d /etc/logrotate.d/node-app

二、Node.js 代码里做日志轮转(不推荐单独用)

方案 1:使用 winston + winston-daily-rotate-file

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

const transport = new winston.transports.DailyRotateFile({
  filename: '/var/log/node-app/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d',
  zippedArchive: true
});

const logger = winston.createLogger({
  transports: [transport]
});

✅ 适合:

  • Docker
  • 不想依赖系统 logrotate

❌ 缺点:

  • 多进程要注意
  • 不如系统级稳定

三、PM2 用户(非常常见)

如果你用 PM2

pm2 install pm2-logrotate

配置示例:

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

✅ PM2 会自动处理 stdout / stderr 日志


四、Docker 场景(简要)

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "5"

Docker 自己管理日志轮转


五、推荐方案总结

场景 推荐方案
服务器直接运行 Node ✅ logrotate
Docker docker logging
PM2 pm2-logrotate
不想动系统 winston daily rotate

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

  • Node 是怎么启动的(systemd / pm2 / docker)
  • 日志写到哪个路径
  • 单进程还是多进程

我可以直接帮你写一份可用的配置文件

0