在 Node.js 项目中,“日志过大”通常分为 运行日志文件过大 和 控制台输出过多 两种情况。下面从 清理方式 和 预防方案 两方面说明。
# 删除日志
rm logs/app.log
# 或清空(保留文件)
> logs/app.log
⚠️ 注意:如果 Node 进程正在写日志,直接 rm 可能导致进程继续写已删除文件(磁盘不释放),建议用下面方式。
# 先清空,不让进程崩
: > logs/app.log
或使用 logrotate(见下文)。
winston + winston-daily-rotate-filenpm install winston winston-daily-rotate-file
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d', // 保留 14 天
maxSize: '20m' // 单文件最大 20MB
});
const logger = winston.createLogger({
transports: [transport]
});
✅ 自动:
如果你用 PM2:
pm2 install pm2-logrotate
配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
✅ 自动清理 PM2 日志
sudo vim /etc/logrotate.d/node-app
示例:
/var/www/nodeapp/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
✅ 系统级、稳定、无需改代码
logger.info()
logger.error()
lsof | grep deleted
du -sh logs/*
如果你愿意,可以告诉我:
我可以给你一套最适合你项目的清理方案。