温馨提示×

Nodejs日志Debian如何分割

小樊
40
2026-08-23 20:50:38
栏目: 编程语言

在 Debian 上给 Node.js 日志做分割,常见且推荐的做法有 3 种,从简单到规范依次是:


✅ 方式一:使用 logrotate(最推荐,Debian 官方方式)

适合场景:Node.js 直接写文件日志(如 winstonpino 输出到文件)

1️⃣ 安装 logrotate(一般已自带)

dpkg -l | grep logrotate
# 没有就装
sudo apt install logrotate

2️⃣ 创建 logrotate 配置文件

假设你的 Node.js 日志路径是:

/var/log/myapp/app.log

新建配置:

sudo nano /etc/logrotate.d/myapp

内容示例:

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

参数说明

参数 作用
daily 每天分割
rotate 7 保留 7 份
compress 压缩旧日志
copytruncate 不重启 Node.js 也能生效
dateext 日志带日期

3️⃣ 测试是否生效

sudo logrotate -d /etc/logrotate.d/myapp

✅ 方式二:Node.js 内部日志分割(不推荐单独用)

使用 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',
  maxFiles: '7d'
});

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

✅ 优点:不依赖系统
❌ 缺点:无法压缩、不能统一管理系统日志


✅ 方式三:PM2 日志分割(如果你用 PM2)

安装

pm2 install pm2-logrotate

配置

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

✅ 适合 PM2 管理的 Node 服务
❌ 不适合 systemd / Docker


✅ 推荐组合(生产环境)

场景 推荐
系统级 ✅ logrotate
PM2 ✅ pm2-logrotate
容器 ✅ stdout + 外部日志驱动

⚠️ 常见坑

不要 Node.js 和 logrotate 同时写同一个文件
不要用 kill -HUP 除非你自己在处理信号
优先用 copytruncate


✅ 示例:systemd + logrotate(推荐)

Node 服务:

StandardOutput=append:/var/log/myapp/app.log
StandardError=append:/var/log/myapp/error.log

logrotate 如上配置即可。


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

  • 是否用 PM2 / systemd / Docker
  • 日志库(winston / pino / console)
  • 日志路径

我可以给你 完全定制的配置

0