清理 Node.js 历史日志 通常取决于你日志的存储方式。下面按常见场景给你一个完整、实用的清理方案。
常见日志位置:
控制台日志
console.log / console.error文件日志
logs/app.log)winston、pino、bunyan)PM2 日志
pm2 logs~/.pm2/logs/Docker 容器日志
/var/lib/docker/containers/# 删除 7 天前的日志
find logs/ -name "*.log" -mtime +7 -delete
或指定目录:
rm -f logs/*.log
⚠️ 注意:不要直接 rm -rf logs,避免误删。
适合正在运行的服务:
> logs/app.log
或:
truncate -s 0 logs/app.log
✅ 好处:不会中断 Node.js 的文件句柄
pm2 logs
pm2 info <app_id>
pm2 flush
只清理某个应用:
pm2 flush <app_name>
安装 PM2 日志管理模块:
pm2 install pm2-logrotate
常用配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true
✅ 表示:
一般不需要手动清理,建议:
winston-daily-rotate-fileconst transport = new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d', // 保留 14 天
})
docker-compose.yml:
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "3"
truncate -s 0 /var/lib/docker/containers/*/*-json.log
⚠️ 需要 root 权限,且容器正在运行
| 场景 | 推荐方案 |
|---|---|
| PM2 | pm2 flush + pm2-logrotate |
| 文件日志 | find + mtime 或日志库轮转 |
| Docker | 日志大小限制 |
| 生产环境 | 自动轮转,不要手动删 |
# 1. 日志在哪?
ls logs/
# 2. 是否被占用?
lsof | grep .log
# 3. 是否正在写入?
du -h logs/
如果你愿意,可以告诉我:
我可以给你一套完全针对你项目的清理方案。