在 Linux 上清理 Node.js 日志,常见做法取决于日志存放在哪里、由谁管理。下面按常见场景给你一套实用方案。
常见路径:
/var/log/myapp/
/home/user/myapp/logs/
查看:
ls -lh /var/log/myapp
PM2 默认日志位置:
~/.pm2/logs/
查看:
pm2 logs --lines 0
pm2 list
日志由 journald 管理:
journalctl -u your-node-service
rm -f /var/log/myapp/*.log
truncate -s 0 /var/log/myapp/app.log
或:
: > /var/log/myapp/app.log
✅ 优点:不影响正在运行的进程
❌ 缺点:文件不会自动变小(inode 还在)
pm2 flush
pm2 flush app_name
pm2 restart app_name
✅ 推荐用于 PM2 部署的 Node 项目
journalctl --disk-usage
sudo journalctl --vacuum-time=7d
或按大小:
sudo journalctl --vacuum-size=100M
防止日志无限增长。
sudo vim /etc/logrotate.d/node-app
内容:
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0644 node node
copytruncate
}
✅ copytruncate 对 Node.js 最安全
✅ 自动轮转、压缩、删除旧日志
docker logs container_id
truncate -s 0 $(docker inspect --format='{{.LogPath}}' container_id)
或限制日志大小(推荐):
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
❌ 直接 rm -f 正在写入的日志文件
→ 可能导致磁盘空间不释放
❌ 删除 node_modules/.cache 当日志用
→ 不是日志,是依赖缓存
| 场景 | 推荐方式 |
|---|---|
| PM2 | pm2 flush |
| systemd | journalctl --vacuum |
| 自定义日志 | logrotate |
| 临时清理 | truncate -s 0 |
| Docker | 限制日志大小 |
如果你愿意,可以告诉我:
我可以帮你写一份完全适合你服务器的清理方案。