在 Debian 上“轮转 Node.js 日志”通常分两种情况:Node.js 自身产生的日志(如 console.log 写文件、PM2 日志、应用内日志库),以及系统级日志轮转。最推荐的是使用 Debian 自带的 logrotate。
下面按常见场景说明。
sudo apt update
sudo apt install logrotate
例如:
/var/log/nodeapp/app.log
sudo nano /etc/logrotate.d/nodeapp
示例配置:
/var/log/nodeapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
daily:每天轮转rotate 14:保留 14 份compress:压缩旧日志copytruncate:不重启 Node.js 直接截断日志(最常用)notifempty:空日志不轮转✅ copytruncate 对 Node.js 非常重要,因为 Node 默认不会重新打开日志文件
PM2 自带日志,但仍需 logrotate
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:compress true
日志位置:
~/.pm2/logs/
npm install winston winston-daily-rotate-file
const transport = new (require('winston-daily-rotate-file'))({
filename: '/var/log/nodeapp/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d',
zippedArchive: true
});
✅ 不需要 logrotate
sudo logrotate -d /etc/logrotate.d/nodeapp # 模拟
sudo logrotate -f /etc/logrotate.d/nodeapp # 强制执行
copytruncatejournalctl -u nodeapp
由 systemd-journald 管理,不靠 logrotate
如果你能告诉我:
我可以给你精准配置。