在 Debian 系统上压缩 Node.js 日志文件,常见做法有手动压缩、定时压缩(logrotate)、或让 Node.js 直接写压缩日志。下面按实用程度给你几种方案。
Debian 自带 logrotate,非常适合管理 Node.js 日志。
假设日志路径为 /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 也能截断日志(常用)delaycompress:延迟一天再压缩(更安全)sudo logrotate -d /etc/logrotate.d/nodejs # 模拟
sudo logrotate -f /etc/logrotate.d/nodejs # 强制执行
gzip /var/log/nodejs/app.log
或保留原文件:
gzip -k /var/log/nodejs/app.log
⚠️ 注意:Node.js 仍在写文件时直接 gzip 可能导致日志丢失,建议配合 copytruncate 或重启服务。
如果你用 winston 或 pino:
const transport = new DailyRotateFile({
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxFiles: '14d'
});
npm i pino pino-roll
const pino = require('pino');
const logger = pino({
transport: {
target: 'pino-roll',
options: {
file: '/var/log/nodejs/app.log',
frequency: 'daily',
compress: 'gzip'
}
}
});
sudo journalctl -u nodejs.service --vacuum-size=100M
| 场景 | 推荐方案 |
|---|---|
| 生产环境 | ✅ logrotate |
| 临时处理 | gzip |
| 新项目 | Node.js 日志库自带压缩 |
| systemd 管理 | journalctl |
如果你愿意,可以告诉我:
我可以给你一份完全贴合你环境的配置。