在 Linux 上清理 Node.js 产生的日志,常见做法有 手动清理、日志轮转、代码层控制、定时任务 几种方式。下面按实用场景给你总结一下。
Node.js 日志常见位置:
logs/pm2 logsnohup.outsystemd)# 查找大日志文件
find / -name "*.log" -size +100M 2>/dev/null
# 删除日志
rm -f /path/to/app.log
# 清空日志(推荐,不中断进程)
> /path/to/app.log
⚠️ 如果进程正在写日志,不要直接 rm,优先清空。
编辑配置:
sudo vim /etc/logrotate.d/node-app
示例:
/var/www/node-app/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
解释:
copytruncate:不重启 Node 也能切日志(很重要)rotate 7:保留 7 天执行测试:
logrotate -d /etc/logrotate.d/node-app
pm2 flush
pm2 start app.js --log-size 10M --log-file /logs/app.log
或修改 ecosystem.config.js:
module.exports = {
apps: [{
name: "app",
script: "app.js",
log_file: "/logs/app.log",
out_file: "/logs/out.log",
error_file: "/logs/err.log",
merge_logs: true,
max_size: "10M"
}]
}
npm install winston winston-daily-rotate-file
const winston = require('winston');
require('winston-daily-rotate-file');
const transport = new winston.transports.DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d',
zippedArchive: true
});
const logger = winston.createLogger({
transports: [transport]
});
✅ 自动按天切割 + 保留 14 天
crontab -e
每天清理 30 天前日志:
0 3 * * * find /var/www/node-app/logs -name "*.log" -mtime +30 -delete
# 查看占用
journalctl --disk-usage
# 清理
sudo journalctl --vacuum-time=7d
✅ logrotate + copytruncate
✅ winston / pino 日志库
✅ pm2 flush(开发环境)
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置。