在 Debian 上,Node.js 本身不会自动压缩日志,通常需要借助**日志库 + 系统工具(logrotate)或进程管理器(PM2)**来完成。下面按常见场景给你几种方案。
which logrotate
# 一般在 /usr/sbin/logrotate
假设日志路径:
/var/log/nodejs/app.log
新建配置文件:
sudo nano /etc/logrotate.d/nodejs
内容示例:
/var/log/nodejs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
参数说明:
compress:启用 gzip 压缩daily:每天轮转rotate 14:保留 14 天copytruncate:不重启 Node.js 也能截断日志(适合普通 fs.write)sudo logrotate -d /etc/logrotate.d/nodejs # 测试
sudo logrotate -f /etc/logrotate.d/nodejs # 强制执行
PM2 自带日志管理:
pm2 install pm2-logrotate
配置压缩和保留:
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'
PM2 会自动:
日志位置示例:
~/.pm2/logs/app-out.log
~/.pm2/logs/app-out.log.1.gz
如果你用 winston / pino:
const pino = require('pino')
const pinoLogger = pino({
transport: {
target: 'pino-roll',
options: {
file: '/var/log/nodejs/app.log',
frequency: 'daily',
gzip: true
}
}
})
const { createLogger, transports } = 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,
maxFiles: '14d'
})
✅ 生产环境推荐组合:
❌ 不推荐:
如果你能告诉我:
我可以给你完全定制的配置。