温馨提示×

如何压缩ubuntu nodejs日志

小樊
33
2026-09-03 11:06:58
栏目: 编程语言

在 Ubuntu 上压缩 Node.js 日志,常见做法有 应用层压缩、系统日志轮转(logrotate)、定时任务压缩、或运行时日志管理。下面按实用程度给你一套方案。


一、最推荐:用 logrotate(系统级,自动)

如果你的 Node.js 日志是写到文件(如 app.log),logrotate 是最省心的方案

1. 创建 logrotate 配置

sudo nano /etc/logrotate.d/nodejs

示例(自动压缩 + 按天轮转):

/var/log/nodejs/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    copytruncate
}

说明:

  • compress:用 gzip 压缩
  • copytruncate:不重启 Node.js 也能截断日志(常用)
  • rotate 14:保留 14 天

2. 手动测试

sudo logrotate -d /etc/logrotate.d/nodejs   # 模拟
sudo logrotate -f /etc/logrotate.d/nodejs   # 强制执行

二、Node.js 应用层日志压缩(写时就压)

适合你自己控制日志写入代码

使用 winston + gzip

npm install winston winston-daily-rotate-file zlib

示例(每天一个 .gz 文件):

const winston = require('winston');
const { DailyRotateFile } = require('winston-daily-rotate-file');
const zlib = require('zlib');

const transport = new DailyRotateFile({
  filename: '/var/log/nodejs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  zippedArchive: true, // 自动 gzip
  maxSize: '20m',
  maxFiles: '14d'
});

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

三、PM2 用户(非常常见)

如果你用 PM2 跑 Node.js:

pm2 install pm2-logrotate
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'

PM2 会自动:

  • 切割日志
  • gzip 压缩
  • 删除旧日志

四、手动/定时压缩(不推荐长期用)

gzip /var/log/nodejs/app.log

或定时任务:

crontab -e
0 0 * * * gzip -f /var/log/nodejs/*.log

⚠️ 注意:直接 gzip 正在写入的日志可能导致丢日志


五、容器 / Docker 场景

如果是 Docker:

  • json-file + max-size
  • 或挂载日志目录到宿主机用 logrotate
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5"
  }
}

总结建议

场景 推荐方案
普通 Ubuntu 服务 logrotate
PM2 pm2-logrotate
自建日志系统 winston + gzip
Docker 日志驱动 + logrotate

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

  • 日志路径
  • 是否用 PM2 / Docker
  • 日志大小 & 增长速度

我可以帮你写完整可直接用的配置

0