温馨提示×

debian nodejs日志如何压缩

小樊
40
2026-09-10 05:03:11
栏目: 编程语言

在 Debian 上,Node.js 本身不会自动压缩日志,通常需要借助**日志库 + 系统工具(logrotate)进程管理器(PM2)**来完成。下面按常见场景给你几种方案。


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

1. 安装 logrotate(通常已自带)

which logrotate
# 一般在 /usr/sbin/logrotate

2. 为 Node.js 日志创建配置

假设日志路径:

/var/log/nodejs/app.log

新建配置文件:

sudo nano /etc/logrotate.d/nodejs

内容示例:

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

参数说明:

  • compress:启用 gzip 压缩
  • daily:每天轮转
  • rotate 14:保留 14 天
  • copytruncate:不重启 Node.js 也能截断日志(适合普通 fs.write)

3. 手动测试

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

二、使用 PM2(如果你用 PM2 启动 Node.js)

PM2 自带日志管理:

pm2 install pm2-logrotate

配置压缩和保留:

pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'

PM2 会自动:

  • 切割日志
  • gzip 压缩
  • 删除旧日志

日志位置示例:

~/.pm2/logs/app-out.log
~/.pm2/logs/app-out.log.1.gz

三、Node.js 代码层压缩(不推荐)

如果你用 winston / pino

pino(内置压缩支持)

const pino = require('pino')
const pinoLogger = pino({
  transport: {
    target: 'pino-roll',
    options: {
      file: '/var/log/nodejs/app.log',
      frequency: 'daily',
      gzip: true
    }
  }
})

winston + winston-daily-rotate-file

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

const transport = new DailyRotateFile({
  filename: '/var/log/nodejs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  zippedArchive: true,
  maxFiles: '14d'
})

四、常见建议

✅ 生产环境推荐组合:

  • PM2 + pm2-logrotate
  • Node 写日志 + logrotate

❌ 不推荐:

  • Node 自己 gzip 日志(复杂、易出错)

如果你能告诉我:

  • 是否使用 PM2
  • 日志路径
  • Node 日志库(winston / pino / 原生 fs)

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

0