在 Ubuntu 上 Node.js 日志过大,通常可以从应用层、运行方式、系统层三个方向来解决。下面按常见场景给你一套实用方案。
推荐:
winstonpino(性能最好)bunyan示例(winston + 按大小轮转):
const winston = require('winston');
require('winston-daily-rotate-file');
const transport = new winston.transports.DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
});
✅ 好处:自动按天 / 大小切割,不会一个文件无限涨
生产环境不要开 debug
logger.level = process.env.NODE_ENV === 'production' ? 'info' : 'debug';
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true
✅ 自动切割 + 压缩 + 保留 N 天
查看日志位置:
pm2 logs
pm2 info <app>
适合任何 Node 服务
创建配置文件:
sudo vim /etc/logrotate.d/node-app
示例:
/var/www/app/logs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
}
测试:
sudo logrotate -d /etc/logrotate.d/node-app
⚠️ copytruncate 对 Node 很关键,避免文件句柄问题
find /var/www/app/logs -name "*.log" -mtime +7 -delete
加进 crontab:
0 3 * * * find /path/logs -name "*.log" -mtime +7 -delete
du -sh /var/log/*
du -sh ~/app/logs/*
truncate -s 0 app.log
✅ Node + PM2 + pm2-logrotate
或
✅ Node + winston + 系统 logrotate
如果你愿意,可以告诉我:
我可以直接帮你写一份可用配置。