温馨提示×

Linux如何备份Nodejs日志

小樊
43
2026-08-02 14:32:12
栏目: 编程语言

在 Linux 上备份 Node.js 日志,常见做法取决于日志的存储方式(文件、stdout、systemd、Docker 等)。下面按最常用场景给你完整方案,从简单到规范。


一、Node.js 日志常见形式

  1. 日志文件
    • 如:/var/log/myapp/app.log
  2. stdout / stderr
    • PM2、Docker、systemd
  3. 日志库
    • winston、pino、bunyan

二、最基础:直接备份日志文件

1️⃣ 手动备份

cp /var/log/myapp/app.log /backup/app-$(date +%F).log

或压缩:

tar czf app-$(date +%F).tar.gz /var/log/myapp/

2️⃣ 自动定时备份(cron)

crontab -e

每天凌晨 2 点备份:

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

% 在 cron 中需要转义


三、推荐方案:日志轮转(非常重要)

不要只备份,要轮转,否则日志会无限变大。

✅ 使用 logrotate(生产环境首选)

示例配置

sudo vim /etc/logrotate.d/node-app
/var/log/myapp/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    copytruncate
    dateext
}

含义说明

参数 作用
daily 每天轮转
rotate 14 保留 14 天
compress gzip 压缩
copytruncate 不重启 Node.js
dateext 按日期命名

适合 Node.js 写文件日志


四、Node.js 使用 PM2 的情况(最常见)

PM2 自带日志

~/.pm2/logs/

备份方式

tar czf pm2-logs-$(date +%F).tar.gz ~/.pm2/logs/

PM2 日志轮转(强烈推荐)

pm2 install pm2-logrotate

配置:

pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

五、Node.js 使用 systemd

日志位置

journalctl -u myapp.service

备份

journalctl -u myapp.service > myapp-$(date +%F).log

或导出为 json:

journalctl -u myapp.service -o json > myapp.json

六、Docker 中的 Node.js 日志

1️⃣ stdout 日志(推荐)

docker logs my_container > app.log 2>&1

或定时:

docker logs my_container 2>&1 | gzip > app-$(date +%F).log.gz

2️⃣ 挂载日志目录

docker run -v /host/logs:/app/logs node-app

然后按「文件备份」处理。


七、使用 Winston / Pino 的最佳实践

✅ Winston 示例

const winston = require('winston');
const { combine, timestamp, json } = winston.format;

const logger = winston.createLogger({
  transports: [
    new winston.transports.File({ filename: 'app.log' })
  ]
});

✅ 配合 logrotate


八、生产环境推荐组合 ✅

场景 推荐方案
单机 Node.js 文件日志 + logrotate
PM2 PM2 + pm2-logrotate
systemd journalctl + logrotate
Docker stdout + 宿主机 logrotate
高并发 Pino + 文件 + logrotate

九、常见错误 ❌

❌ 直接 rm 日志
❌ 不轮转导致磁盘爆满
❌ 备份时 Node.js 正在写文件(用 copytruncate


十、我可以帮你定制方案

你可以告诉我:

  1. ✅ Node.js 如何启动(PM2 / systemd / Docker)
  2. ✅ 日志路径或是否 stdout
  3. ✅ 日志大小 & 保留天数

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

0