在 Ubuntu 上清理 Node.js 日志,通常取决于日志是写在哪里的。下面按常见场景给你一套完整、安全的做法。
常见位置:
/var/log/myapp/
/home/user/app/logs/
./logs/
可查看进程启动时是否有类似:
fs.createWriteStream('logs/app.log')
winston / pino / log4js 配置路径
查看正在运行的 Node 进程:
ps aux | grep node
如果是 systemd 启动的服务:
journalctl -u your-node-service-name
或查看:
/var/log/syslog
/var/log/messages
~/.pm2/logs/
/var/log/nginx/access.log
/var/log/nginx/error.log
不要直接删除正在写入的日志文件
# 清空日志内容,不删除文件
: > /path/to/app.log
或
truncate -s 0 /path/to/app.log
✅ 优点:
rm -f /var/log/myapp/*.log.2025*
⚠ 注意:
.logpm2 flush # 清空所有 PM2 日志
pm2 logs --lines 0
或手动清理:
rm -f ~/.pm2/logs/*
journalctl --vacuum-time=7d
journalctl --vacuum-size=500M
Ubuntu 自带 logrotate
新建配置:
sudo vim /etc/logrotate.d/node-app
示例:
/var/log/myapp/*.log {
daily
rotate 7
missingok
notifempty
compress
copytruncate
}
✅ copytruncate 对 Node.js 非常友好
测试:
sudo logrotate -d /etc/logrotate.d/node-app
使用 Winston / Pino 时:
示例(Winston):
new winston.transports.File({
filename: 'app.log',
maxsize: 10485760, // 10MB
maxFiles: 5
})
| 场景 | 清理位置 |
|---|---|
| 自己写的 Node 应用 | logs/*.log |
| PM2 | ~/.pm2/logs/ |
| systemd | journalctl |
| Nginx | /var/log/nginx/ |
| Docker | docker logs |
# 清空 PM2 日志
pm2 flush
# 清空自定义日志
: > /var/log/myapp/app.log
# 清理 7 天前日志
find /var/log/myapp -name "*.log" -mtime +7 -delete
如果你愿意,可以直接告诉我:
我可以给你精确的清理命令,避免误删数据。