在 Linux 上清理 Node.js 日志,常见做法取决于日志的生成方式。下面按常见场景给你一套完整、可操作的方案。
常见目录:
/var/log/
~/logs/
./logs/
查找大文件:
find / -name "*.log" -size +100M 2>/dev/null
: > /path/to/app.log
# 或
truncate -s 0 /path/to/app.log
⚠️ 不要直接 rm 日志文件
如果程序还在运行,删了文件空间不会释放。
sudo apt install logrotate # Debian/Ubuntu
sudo yum install logrotate # CentOS
编辑或新建:
sudo vim /etc/logrotate.d/node-app
内容示例:
/var/log/node-app/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
✅ 含义:
sudo logrotate -d /etc/logrotate.d/node-app
pm2 logs
pm2 flush
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
docker logs <container_id>
truncate -s 0 /var/lib/docker/containers/*/*-json.log
docker-compose.yml:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
示例(winston):
const { createLogger, transports } = require('winston');
const logger = createLogger({
transports: [
new transports.File({ filename: 'app.log', maxsize: 10485760, maxFiles: 5 })
]
});
df -h # 磁盘是否满了
du -sh /var/log/* # 哪个日志大
lsof | grep deleted # 是否有已删除但未释放
✅ 不要手动删日志
✅ 使用 logrotate 或 pm2-logrotate
✅ 日志按天切割
✅ 限制单个日志大小
✅ 不要用 console.log 打生产日志
如果你愿意,可以告诉我:
我可以帮你直接写一份可用的 logrotate 或清理脚本。