温馨提示×

Ubuntu Nodejs日志怎么备份

小樊
48
2026-08-05 09:47:41
栏目: 编程语言

在 Ubuntu 上为 Node.js 日志做备份,常见做法取决于日志的存储方式(文件、stdout、容器、PM2 等)。下面按最常见场景给你一套完整、可落地的方案。


一、Node.js 日志常见存储方式

  1. 日志直接写文件
    fs.appendFileSync('app.log', log)
    
  2. 使用日志库(推荐)
    • winston
    • pino
    • bunyan
  3. PM2 管理进程
  4. Docker 容器
  5. systemd 服务

二、最常用方案(推荐 ✅)

✅ 方案一:logrotate(最标准、最省心)

适合:

  • 日志写入文件
  • 长期运行的服务
  • 生产环境

1️⃣ 安装(一般系统自带)

sudo apt install logrotate

2️⃣ 创建配置

sudo nano /etc/logrotate.d/node-app

示例配置:

/var/log/node/app.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0640 node node
    copytruncate
}

参数说明

参数 作用
daily 每天轮转
rotate 30 保留 30 天
compress gzip 压缩
copytruncate 不中断 Node 写文件
missingok 文件不存在不报错

不需要重启 Node.js


✅ 方案二:PM2 日志备份(最常用)

1️⃣ PM2 日志位置

~/.pm2/logs/

2️⃣ 使用 PM2 自带日志管理

pm2 install pm2-logrotate

配置:

pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:compress true

✅ 自动轮转、压缩、删除


三、手动备份(一次性 / 脚本)

示例:定时打包日志

tar -czf node-logs-$(date +%F).tar.gz /var/log/node

可加入 crontab:

crontab -e
0 2 * * * tar -czf /backup/node-logs-$(date +\%F).tar.gz /var/log/node

四、Docker 场景

✅ 推荐方式

  1. 日志不写文件
  2. 使用 docker logs
docker logs <container> > app.log

或配置 log driver

docker run \
  --log-driver=json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3

五、Node.js 代码层面的建议(最佳实践 ✅)

✅ 使用 winston + 按日期切割

const { createLogger, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const transport = new DailyRotateFile({
  dirname: '/var/log/node',
  filename: 'app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '30d'
});

const logger = createLogger({
  transports: [transport]
});

✅ 自动按天备份
✅ 不需要 logrotate


六、备份策略建议(生产环境)

级别 建议
本地 logrotate / pm2-logrotate
远程 定期 scp / rsync 到备份服务器
上传到 OSS / S3
监控 日志 + 监控(Prometheus / Grafana)

七、快速选择指南

场景 推荐方案
普通 Node 服务 logrotate
PM2 pm2-logrotate
Docker json-file + log-opt
高可控 winston + daily rotate

如果你愿意,可以告诉我:

  • Node.js 运行方式(PM2 / Docker / systemd)
  • 日志路径
  • 是否生产环境

我可以 直接给你一份可用的配置文件

0