温馨提示×

debian nodejs日志怎么轮转

小樊
43
2026-09-22 10:55:33
栏目: 编程语言

在 Debian 上给 Node.js 日志做轮转(log rotation),常见有几种方式,从“最推荐”到“可选”如下:


一、使用系统自带 logrotate(最推荐 ✅)

Debian 默认已安装 logrotate,适合 文件日志(如 app.log)。

1. 示例:Node.js 写文件日志

const fs = require('fs');
const log = fs.createWriteStream('/var/log/nodeapp/app.log', { flags: 'a' });

2. 创建 logrotate 配置

sudo nano /etc/logrotate.d/nodeapp

内容示例:

/var/log/nodeapp/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    copytruncate
}

关键参数说明

  • copytruncate对 Node.js 非常重要
    • 不重启进程,复制后清空原文件
    • 避免 Node 还持有旧 fd 导致日志不写
  • daily / weekly:轮转周期
  • rotate 14:保留 14 份
  • compress:压缩旧日志

3. 测试配置

sudo logrotate -d /etc/logrotate.d/nodeapp
sudo logrotate -f /etc/logrotate.d/nodeapp

二、Node.js 内部日志轮转(不依赖系统)

适合 不想用 logrotate容器环境

1. 使用 winston + winston-daily-rotate-file

npm install winston winston-daily-rotate-file
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

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

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

✅ 自动按天轮转
✅ 自动压缩
✅ 不需要 logrotate


三、PM2 自带日志管理(如果你用 PM2)

pm2 install pm2-logrotate

配置示例:

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

✅ 适合 PM2 管理的 Node 服务
❌ 不适合裸 node 启动


四、Docker 环境(补充)

如果是 Docker:

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "5"

总结建议

场景 推荐方案
服务器裸跑 Node logrotate + copytruncate
容器 / 微服务 winston-daily-rotate-file
PM2 pm2-logrotate
Docker Docker logging driver

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

  • 你是 裸 node / PM2 / Docker
  • 日志是 stdout 还是文件
  • Debian 版本

我可以给你一份完全贴合你环境的配置

0