温馨提示×

linux nodejs日志轮转配置

小樊
38
2026-09-23 20:50:04
栏目: 编程语言

在 Linux 下对 Node.js 日志进行轮转(log rotation),常见做法有 系统级 logrotate 和 应用内日志库轮转 两种。下面分别说明。


一、使用系统 logrotate(推荐生产环境)

适用于 Node.js 直接输出日志到文件(如 app.log)。

1. 示例日志文件

/var/log/myapp/app.log

2. 创建 logrotate 配置

sudo vim /etc/logrotate.d/myapp

示例配置:

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

参数说明

  • daily:每天轮转
  • rotate 14:保留 14 个历史文件
  • compress:压缩旧日志
  • copytruncate:复制后清空原文件(不影响 Node.js 文件句柄)
  • notifempty:空文件不轮转

⚠️ 若 Node.js 使用 fs.appendFile 或 console.log 写文件,copytruncate 很关键

3. 手动测试

sudo logrotate -d /etc/logrotate.d/myapp  # 调试
sudo logrotate -f /etc/logrotate.d/myapp  # 强制执行

二、Node.js 应用内日志轮转(更可控)

方案 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({
  dirname: '/var/log/myapp',
  filename: 'app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  zippedArchive: true,
  maxSize: '20m',
  maxFiles: '14d'
});

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

logger.info('hello log');

优点:

  • 不依赖系统
  • 支持按大小 / 时间
  • 自动压缩

方案 2:pm2 + pm2-logrotate(PM2 用户)

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

三、Docker 环境(补充)

若 Node.js 运行在 Docker:

  • 使用 json-file 日志驱动
  • 配置 /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5"
  }
}

四、选择建议

场景 推荐方案
传统服务器部署 logrotate
PM2 部署 pm2-logrotate
微服务 / 容器 winston + daily-rotate
高并发写日志 应用内轮转

如果你能说明:

  • 是否使用 PM2
  • 日志输出方式(console / 文件)
  • Linux 发行版

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

0 踩