在 Ubuntu 上清理 Node.js 日志,通常取决于日志是写在哪里的。下面按常见场景给你一套完整、安全的做法。
一、先确认 Node.js 日志在哪里
1️⃣ Node.js 应用自身产生的日志
常见位置:
/var/log/myapp/
/home/user/app/logs/
./logs/
可查看进程启动时是否有类似:
fs.createWriteStream('logs/app.log')
winston / pino / log4js 配置路径
查看正在运行的 Node 进程:
ps aux | grep node
2️⃣ 系统 / systemd 管理的 Node 服务日志
如果是 systemd 启动的服务:
journalctl -u your-node-service-name
或查看:
/var/log/syslog
/var/log/messages
3️⃣ Nginx / PM2 代理的 Node 日志
- PM2
~/.pm2/logs/
- Nginx
/var/log/nginx/access.log
/var/log/nginx/error.log
二、清理 Node.js 日志(安全做法)
✅ 方法 1:清空日志文件(推荐)
不要直接删除正在写入的日志文件
# 清空日志内容,不删除文件
: > /path/to/app.log
或
truncate -s 0 /path/to/app.log
✅ 优点:
- 不影响正在运行的 Node 进程
- 不丢失文件句柄
✅ 方法 2:删除旧日志(非当前写入)
rm -f /var/log/myapp/*.log.2025*
⚠ 注意:
- 不要删除 Node 当前正在写入的
.log
✅ 方法 3:PM2 日志清理
pm2 flush # 清空所有 PM2 日志
pm2 logs --lines 0
或手动清理:
rm -f ~/.pm2/logs/*
✅ 方法 4:systemd 日志清理
journalctl --vacuum-time=7d
journalctl --vacuum-size=500M
三、长期优化(强烈建议)
✅ 1️⃣ 使用日志轮转(logrotate)
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
✅ 2️⃣ Node.js 日志库配置
使用 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
如果你愿意,可以直接告诉我:
- ✅ Node 启动方式(PM2 / systemd / docker / 手动)
- ✅ 日志路径或报错信息
我可以给你精确的清理命令,避免误删数据。