温馨提示×

如何压缩Debian Nodejs日志

小樊
38
2026-07-13 04:07:08
栏目: 编程语言

在 Debian 上压缩 Node.js 日志,常见做法有 手动压缩、定时任务(logrotate)、Node.js 自身日志库配置 三种。下面按实用程度给你一个完整方案。


一、使用 logrotate最推荐 ✅)

Debian 自带 logrotate,非常适合管理 Node.js 日志。

1️⃣ 安装(一般已安装)

dpkg -l logrotate

如果没有:

sudo apt update
sudo apt install logrotate

2️⃣ 创建 Node.js 日志配置

假设你的日志目录是:

/var/log/myapp/

创建配置文件:

sudo nano /etc/logrotate.d/myapp

示例配置(✅ 推荐):

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 myuser myuser
    copytruncate
}

参数说明

参数 作用
daily 每天轮转
rotate 7 保留 7 份
compress 使用 gzip 压缩
delaycompress 下次轮转再压缩(防止 Node 正在写)
copytruncate 不重启 Node 也能生效
notifempty 空文件不处理

3️⃣ 测试配置

sudo logrotate -d /etc/logrotate.d/myapp

强制执行一次:

sudo logrotate -f /etc/logrotate.d/myapp

二、手动压缩已有日志(临时方案)

如果你只是想立刻压缩旧日志:

cd /var/log/myapp
gzip *.log

或只压缩 7 天前的:

find . -name "*.log" -mtime +7 -exec gzip {} \;

⚠️ 注意:Node.js 正在写入的日志不要直接 gzip,否则可能丢失数据。


三、Node.js 日志库自动轮转(开发阶段推荐)

使用 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({
  dirname: '/var/log/myapp',
  filename: 'app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m',
  maxFiles: '14d',
  zippedArchive: true
});

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

✅ 自动:

  • 按天切割
  • 超过大小切割
  • gzip 压缩
  • 自动删除旧日志

四、PM2 用户(如果你用 PM2)

PM2 自带日志管理:

pm2 install pm2-logrotate

配置:

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

五、推荐组合(生产环境 ✅)

没有 PM2

Node.js + winston + logrotate

有 PM2

PM2 + pm2-logrotate

六、常见问题

❓ 压缩后 Node 不写日志了?

使用 copytruncatepm2 reload

❓ 日志太大怎么办?

  • 限制日志级别(info / warn / error)
  • 禁用 debug
  • 日志按天切割

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

  • Node.js 运行方式(systemd / PM2 / docker)
  • 日志路径
  • 是否生产环境

我可以帮你写一份 完全可用的配置

0