在 Linux 上清理 Node.js 日志,常见做法分为手动清理、自动轮转和代码层控制三种。下面按实用程度给你总结。
rm -f /path/to/nodejs/logs/*.log
> /path/to/nodejs/logs/app.log
# 或
truncate -s 0 /path/to/nodejs/logs/app.log
⚠️ 如果 Node.js 正在写日志,直接
rm可能导致:
- 文件删了但磁盘不释放(进程仍占用)
- 日志继续写到已删除文件
logrotate(系统级,强烈推荐)sudo vim /etc/logrotate.d/node-app
/path/to/nodejs/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
说明:
daily:每天轮转rotate 7:保留 7 份compress:压缩旧日志copytruncate:不中断 Node 进程写日志(关键)测试:
logrotate -d /etc/logrotate.d/node-app
winston + winston-daily-rotate-fileconst 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
});
优点:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "5"
}
}
docker system prune
如果你用 PM2:
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
❌ 直接 rm 正在写入的日志
❌ 写无限增长的大文件
❌ 用 console.log 当正式日志
| 场景 | 推荐方式 |
|---|---|
| 生产服务 | logrotate |
| Node 项目 | winston + 轮转 |
| Docker | 日志驱动限制 |
| PM2 | pm2-logrotate |
如果你愿意,可以告诉我:
我可以给你一套可直接用的配置。