在 Ubuntu 上做 Node.js 日志分割,常见做法有 3 种,从简单到规范依次是:
logrotate(推荐)适合:所有 Node.js 服务(pm2 / 原生 node / docker)
which logrotate
sudo vim /etc/logrotate.d/node-app
示例(假设日志在 /var/log/node/):
/var/log/node/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
⚠️ 关键点:
copytruncate:不重启 Node.js 也能分割日志(最安全)kill Node 进程sudo logrotate -d /etc/logrotate.d/node-app
sudo logrotate -f /etc/logrotate.d/node-app
适合:不想依赖系统工具
winston + winston-daily-rotate-filenpm install winston winston-daily-rotate-file
const { createLogger, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = createLogger({
transports: [
new DailyRotateFile({
dirname: '/var/log/node',
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d',
zippedArchive: true
})
]
});
✅ 自动按天切割
✅ 不依赖系统
如果你用 PM2:
pm2 install pm2-logrotate
配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 14
pm2 set pm2-logrotate:compress true
✅ 自动分割所有 PM2 日志
| 场景 | 推荐 |
|---|---|
| 生产服务器 | ✅ logrotate |
| Docker | winston / logrotate |
| PM2 | pm2-logrotate |
| 不想改代码 | logrotate |
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置。