温馨提示×

ubuntu nodejs日志如何压缩

小樊
52
2026-10-21 01:35:05
栏目: 编程语言

在 Ubuntu 上,Node.js 的日志压缩通常不是 Node.js 自身完成的,而是由系统日志管理工具或定时任务来处理。下面按常见场景给你几种实用方案。


一、使用 logrotate(最推荐,Ubuntu 自带)

1. 安装(一般已自带)

which logrotate

如果没有:

sudo apt update
sudo apt install logrotate

2. 创建 Node.js 日志的 rotate 配置

假设日志目录:

/var/log/nodejs/app.log

新建配置文件:

sudo nano /etc/logrotate.d/nodejs

示例内容:

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

参数说明

  • daily:每天轮转
  • rotate 14:保留 14 天
  • compress:使用 gzip 压缩
  • copytruncate:不重启 Node.js 直接截断日志(非常重要)

3. 手动测试

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

二、Node.js 应用层日志库(开发阶段)

1. 使用 winston + winston-daily-rotate-file

npm install winston winston-daily-rotate-file

示例:

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

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

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

✅ 优点:

  • 自动按天切割
  • 自动压缩(.gz)

三、PM2 用户(非常常见)

如果你用 PM2 启动 Node.js:

PM2 自带日志

~/.pm2/logs/

配合 logrotate

sudo nano /etc/logrotate.d/pm2
/home/*/.pm2/logs/*.log {
    daily
    rotate 7
    compress
    delaycompress
    notifempty
    copytruncate
}

四、手动压缩(不推荐长期使用)

gzip /var/log/nodejs/app.log

⚠️ 注意:

  • Node.js 仍在写旧文件
  • 容易导致日志丢失

五、推荐方案总结

场景 推荐方式
生产环境 ✅ logrotate
Node.js 项目 ✅ winston-daily-rotate-file
PM2 ✅ logrotate + PM2
临时处理 gzip(不推荐)

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

  • 日志路径
  • 是否用 PM2 / Docker
  • 日志量大小

我可以帮你写一份完全适配你环境的配置。

0 踩