下面给你几种在 Linux 上备份 Node.js 日志的常见方案,从简单到专业,你可以按业务规模选择。
/var/log/myapp/
├── app.log
├── error.log
cp /var/log/myapp/app.log /var/log/myapp/backup/app-$(date +%Y%m%d).log
这是生产环境标准做法
# 一般 Linux 自带
which logrotate
sudo vim /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 node node
copytruncate
}
✅ 含义说明:
| 参数 | 说明 |
|---|---|
| daily | 每天轮转 |
| rotate 30 | 保留 30 天 |
| compress | 压缩 |
| copytruncate | 不重启 Node.js |
| create | 新建日志文件权限 |
sudo logrotate -d /etc/logrotate.d/myapp
const { createLogger, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
dirname: '/var/log/myapp',
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '30d'
});
const logger = createLogger({
transports: [transport]
});
✅ 优点:
docker run \
--log-driver=json-file \
--log-opt max-size=10m \
--log-opt max-file=5 \
my-node-app
-v /data/logs:/app/logs
rsync -avz /var/log/myapp/ user@backup-server:/backup/logs/
crontab -e
0 2 * * * rsync -avz /var/log/myapp/ backup-server:/backup/logs/
| 场景 | 推荐方案 |
|---|---|
| 普通 Linux 服务 | ✅ logrotate |
| Node.js 应用 | ✅ winston-daily-rotate |
| Docker | ✅ Docker log-opt |
| 高可用 / 审计 | ✅ 远程备份 |
✅ 日志不要无限增长
✅ 按天或大小切分
✅ 保留 7–30 天
✅ 使用 copytruncate 避免重启
✅ 敏感日志不要备份到公网
如果你愿意,可以告诉我:
我可以帮你直接写一份可用的备份配置 ✅