在 Debian 上给 Node.js 做日志切割,常见有 3 种做法,从简单到规范依次是:
适合:所有 Node.js 服务(pm2、systemd、裸跑都行)
apt install logrotate
假设 Node.js 日志在:
/var/log/nodeapp/app.log
新建:
/etc/logrotate.d/nodeapp
内容示例:
/var/log/nodeapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
copytruncate:不重启 Node.js 就能切割(重要)copytruncate,Node.js 必须支持信号重新打开日志(如 pm2)logrotate -d /etc/logrotate.d/nodeapp # 测试
logrotate -f /etc/logrotate.d/nodeapp # 强制执行
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:compress true
✅ 优点:
❌ 缺点:
使用 winston + winston-daily-rotate-file
const transport = new (require('winston-daily-rotate-file'))({
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d'
});
✅ 适合:
❌ 不适合:
| 场景 | 推荐 |
|---|---|
| 生产服务器 | ✅ logrotate |
| PM2 部署 | ✅ pm2-logrotate |
| Docker | 容器外 logrotate 或 logging driver |
| 微服务 | winston 切割 |
如果你愿意,可以告诉我:
我可以直接帮你写一份可用的配置。