温馨提示×

debian nodejs日志切割怎么做

小樊
46
2026-10-04 05:51:18
栏目: 编程语言

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


一、用 logrotate(最推荐,系统级)

适合:所有 Node.js 服务(pm2、systemd、裸跑都行)

1. 安装

apt install logrotate

2. 创建配置文件

假设 Node.js 日志在:

/var/log/nodeapp/app.log

新建:

/etc/logrotate.d/nodeapp

内容示例:

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

3. 重点说明

  • copytruncate:不重启 Node.js 就能切割(重要)
  • 如果不加 copytruncate,Node.js 必须支持信号重新打开日志(如 pm2)

4. 手动测试

logrotate -d /etc/logrotate.d/nodeapp  # 测试
logrotate -f /etc/logrotate.d/nodeapp # 强制执行

二、用 PM2 自带日志管理(如果你用 PM2)

1. 安装

pm2 install pm2-logrotate

2. 配置

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

✅ 优点:

  • 自动切割
  • 不用重启进程

❌ 缺点:

  • 只能用于 PM2 管理的应用

三、Node.js 代码内切割(不推荐)

使用 winston + winston-daily-rotate-file

const transport = new (require('winston-daily-rotate-file'))({
  filename: 'app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d'
});

✅ 适合:

  • 多实例
  • 容器环境

❌ 不适合:

  • 简单服务(太重)

四、推荐方案总结

场景 推荐
生产服务器 ✅ logrotate
PM2 部署 ✅ pm2-logrotate
Docker 容器外 logrotate 或 logging driver
微服务 winston 切割

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

  • Node.js 启动方式(systemd / pm2 / docker)
  • 日志路径
  • 是否允许重启进程

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

0 踩