在 Linux 下对 JS(Node.js)日志进行切割,常见做法有以下几种,按推荐程度给你说明:
logrotate(系统级,自动切割)适合:所有 Node.js 服务日志(console、文件日志)
/var/log/myapp/)创建配置文件:
sudo vim /etc/logrotate.d/myapp
内容示例:
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
说明:
daily:每天切割rotate 14:保留 14 天compress:压缩旧日志copytruncate:不重启 Node.js 也能切割(非常重要)✅ copytruncate 是 Node.js 日志切割的关键
winston + winston-daily-rotate-filenpm install winston winston-daily-rotate-file
示例:
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
transports: [
new DailyRotateFile({
filename: '/var/log/myapp/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d',
zippedArchive: true
})
]
});
logger.info('hello');
✅ 自动按天切割
✅ 自动压缩
✅ 不依赖系统
如果你用 PM2:
pm2 install pm2-logrotate
配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 14
✅ 自动切割
✅ 自动清理
✅ 零代码改动
mv app.log app.log.$(date +%Y%m%d)
kill -USR1 <node_pid>
❌ 容易丢日志
❌ 维护麻烦
| 场景 | 推荐方案 |
|---|---|
| 生产服务 | logrotate + copytruncate |
| 新项目 | winston-daily-rotate-file |
| PM2 项目 | pm2-logrotate |
如果你愿意,可以告诉我:
我可以直接给你一份可复制的配置。