温馨提示×

nodejs日志分割ubuntu如何做

小樊
42
2026-10-03 13:25:45
栏目: 编程语言

在 Ubuntu 上做 Node.js 日志分割,常见做法有 3 种,从简单到规范依次是:


一、最简单:用 logrotate(推荐)

适合:所有 Node.js 服务(pm2 / 原生 node / docker)

1. 安装 logrotate(一般已自带)

which logrotate

2. 创建配置文件

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

示例(假设日志在 /var/log/node/):

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

⚠️ 关键点:

  • copytruncate:不重启 Node.js 也能分割日志(最安全)
  • 不要用 kill Node 进程

3. 手动测试

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

二、Node.js 内部切割(代码级)

适合:不想依赖系统工具

使用 winston + winston-daily-rotate-file

npm install winston winston-daily-rotate-file
const { createLogger, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const logger = createLogger({
  transports: [
    new DailyRotateFile({
      dirname: '/var/log/node',
      filename: 'app-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      maxFiles: '14d',
      zippedArchive: true
    })
  ]
});

✅ 自动按天切割
✅ 不依赖系统


三、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 日志


推荐方案总结

场景 推荐
生产服务器 ✅ logrotate
Docker winston / logrotate
PM2 pm2-logrotate
不想改代码 logrotate

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

  • 用什么启动 Node(pm2 / systemd / docker)
  • 日志路径
  • 日志量(MB/天)

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

0 踩