温馨提示×

nodejs日志linux如何分割

小樊
35
2026-10-17 05:35:24
栏目: 编程语言

在 Linux 下对 Node.js 日志进行分割,常见做法有下面几类,按“推荐程度 + 使用频率”给你说明:


一、最推荐:使用日志库自带分割(不改系统)

1️⃣ winston + winston-daily-rotate-file(最常用)

适合 Node.js 项目,不依赖系统配置。

npm install winston winston-daily-rotate-file

示例:

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

const transport = new DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m',
  maxFiles: '14d'
});

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

✅ 按天 / 大小自动分割
✅ 自动删除旧日志
✅ 不依赖 Linux 环境


2️⃣ pino + pino-roll

性能极高,适合高并发服务。

npm install pino pino-roll
const pino = require('pino');
const rotate = require('pino-roll');

const logger = pino(
  {},
  rotate({ file: 'logs/app.log', frequency: 'daily', size: '10M' })
);

二、Linux 系统级方案(通用所有日志)

3️⃣ logrotate(服务器标准方案)

适合:

  • 直接 console.log 写文件
  • PM2 日志
  • 任何文本日志

示例配置 /etc/logrotate.d/node-app:

/var/log/node/app.log {
  daily
  rotate 14
  size 100M
  compress
  missingok
  notifempty
  copytruncate
}

✅ 系统级稳定
✅ 自动压缩
⚠️ 需要 copytruncate(Node 不重启)


三、PM2 用户专用

4️⃣ PM2 自带日志分割

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30

✅ 零代码修改
✅ 适合 PM2 部署


四、Docker 环境

5️⃣ Docker logging + logrotate

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

选择建议

场景 推荐
Node 项目 winston / pino
已有日志文件 logrotate
PM2 部署 pm2-logrotate
Docker docker log driver

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

  • 你用 PM2 / Docker / 原生 node?
  • 日志是 console.log 还是日志库?
  • 想按 大小 / 时间 分割?

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

0 踩