在 Linux 上,JS 应用日志的轮转通常和「日志怎么产生」「用什么跑 JS」有关。下面按常见场景给你讲清楚。
不管你是 Node.js 还是前端构建日志,只要日志是写文件,就用 logrotate。
假设日志路径:
/var/log/myapp/app.log
新建配置:
sudo vim /etc/logrotate.d/myapp
内容:
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
daily:每天轮转rotate 7:保留 7 份compress:压缩旧日志copytruncate:不重启进程,直接截断文件(Node 常用)notifempty:空文件不轮转logrotate -d /etc/logrotate.d/myapp # 模拟
logrotate -f /etc/logrotate.d/myapp # 强制
✅ 适合:pm2、node 直接跑、docker 外挂日志
PM2 自带日志,但不自动压缩。
pm2 install pm2-logrotate
配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true
✅ 简单,但功能比 logrotate 弱
如果是容器:
docker run \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=5 \
node app
-v /var/log/myapp:/app/logs
然后宿主机用 logrotate
如 winston、pino 支持:
require('pino-roll')
✅ 可控
❌ 增加应用复杂度
| 场景 | 推荐 |
|---|---|
| 服务器 Node 服务 | logrotate |
| PM2 管理 | pm2-logrotate |
| Docker | docker log-opt |
| 多服务统一 | logrotate |
如果你愿意,可以告诉我:
我可以直接给你一份可用配置。