温馨提示×

Linux如何压缩Nodejs日志

小樊
37
2026-08-02 14:47:12
栏目: 编程语言

在 Linux 下压缩 Node.js 日志,常见做法有 手动压缩定时任务压缩、以及 让 Node.js 自动轮转并压缩。下面按常见场景给你一套实用方案。


一、手动压缩(最简单)

假设日志文件是:

/var/log/node/app.log

1️⃣ 使用 gzip(最常用)

gzip app.log

结果:

app.log.gz

✅ 优点:简单、压缩率高
❌ 缺点:原文件会被删除


2️⃣ 使用 tar.gz

tar -czvf app-$(date +%Y%m%d).tar.gz app.log

适合多个日志文件:

tar -czvf logs-$(date +%Y%m%d).tar.gz *.log

二、保留原文件压缩

gzip -c app.log > app.log.gz

或者:

tar -czvf app.tar.gz app.log

三、按日期自动压缩(推荐)

示例:每天压缩前一天日志

#!/bin/bash

LOG_DIR=/var/log/node
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

gzip $LOG_DIR/app-$YESTERDAY.log

四、使用 logrotate(生产环境强烈推荐 ✅)

这是 最标准、最安全 的方式。

1️⃣ 安装(一般系统自带)

which logrotate

2️⃣ 创建 logrotate 配置

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

示例配置:

/var/log/node/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

参数说明

参数 作用
daily 每天轮转
rotate 7 保留 7 个备份
compress 使用 gzip 压缩
delaycompress 下次再压缩
copytruncate 不重启 Node.js
notifempty 空文件不处理

Node.js 不需要重启


3️⃣ 测试是否生效

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

五、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({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m',
  maxFiles: '14d',
  zippedArchive: true // ✅ 自动压缩
});

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

✅ 自动生成:

app-2026-01-21.log.gz

六、常见 Node.js 日志路径

场景 路径
PM2 ~/.pm2/logs/
Docker /var/log/ 或 volume
自定义 /var/log/node/

七、推荐方案总结

场景 推荐
临时压缩 gzip
定时清理 cron + gzip
生产环境 logrotate
Node.js 内部 winston-daily-rotate-file

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

  • 日志路径
  • 是否使用 PM2 / Docker
  • 是否希望不重启 Node.js

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

0