温馨提示×

linux下nodejs日志如何分割

小樊
48
2026-09-08 13:56:29
栏目: 编程语言

在 Linux 下对 Node.js 日志进行分割(rotate),常见做法有三类:应用层日志库自带分割系统工具 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: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m',
  maxFiles: '14d'
});

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

✅ 优点

  • 自动按日期/大小分割
  • 不依赖系统配置
  • 适合容器环境

2. 使用 pino + pino-rotate

性能更好,适合高并发服务。

npm install pino pino-rotate

二、系统级方案(通用、稳定)

使用 logrotate(最推荐生产环境)

假设你的 Node 服务输出日志到:

/var/log/node/app.log

1. 创建 logrotate 配置

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

内容示例:

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

2. 参数说明

  • daily:每天分割
  • rotate 14:保留 14 份
  • compress:压缩旧日志
  • copytruncate:不重启进程直接截断日志(Node 常用

✅ 优点

  • 不依赖 Node 代码
  • 稳定、省心

⚠️ 注意

  • 若不用 copytruncate,需让 Node 支持 SIGHUP 重新打开日志文件

三、PM2 用户(最简单)

如果你用 PM2

pm2 install pm2-logrotate

配置示例:

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

✅ 自动按大小分割
✅ 不需要额外配置系统


四、Docker 环境(特别说明)

如果是容器:

  • 不要在容器里写文件日志
  • 直接输出到 stdout / stderr
  • 用 Docker / k8s 的 log driver 处理
console.log('info message')

五、方案选择建议

场景 推荐方案
普通 Node 服务 winston-daily-rotate-file
生产服务器 logrotate
PM2 管理 pm2-logrotate
Docker stdout + 日志驱动

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

  • 是否使用 PM2 / Docker
  • 日志量大小
  • 是否已有日志代码

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

0