清理 Node.js 日志的方法取决于日志的存储方式(文件、控制台、数据库等)和使用的日志工具。下面按常见场景给你一个完整、实用的清理方案。
rm logs/*.log
rm -f logs/app-*.log
⚠️ 注意:如果 Node.js 进程正在写入该文件,直接删除可能不会释放磁盘空间,需要重启服务或重新打开文件句柄。
truncate -s 0 logs/app.log
或:
: > logs/app.log
✅ 优点:
winstonconst { createLogger, transports } = require('winston');
require('winston-daily-rotate-file');
const transport = new transports.DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '7d', // 保留 7 天
maxSize: '20m' // 单个文件最大 20MB
});
✅ 自动清理,无需手动删除
morgan(Express)Morgan 本身不负责清理日志,需要配合文件轮转:
npm install file-stream-rotator
const rotator = require('file-stream-rotator');
const accessLogStream = rotator.getStream({
filename: 'logs/access-%DATE%.log',
frequency: 'daily',
verbose: false
});
logrotate(强烈推荐)创建配置:
sudo vim /etc/logrotate.d/node-app
示例:
/var/www/app/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
✅ 好处:
docker system prune -f
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}
pm2 flush
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
✅ 不要在线上打印:
console.log(JSON.stringify(bigObject))
✅ 使用日志级别控制:
logger.info(...)
logger.debug(...) // 生产环境关闭
| 场景 | 推荐方案 |
|---|---|
| 本地开发 | 手动删除 + truncate |
| 生产环境 | logrotate |
| Express | morgan + 日志切割 |
| PM2 | pm2-logrotate |
| Docker | 限制日志大小 |
| 长期运行 | winston-daily-rotate-file |
如果你愿意,可以直接告诉我:
我可以给你一套完全贴合你项目的清理方案。