温馨提示×

如何压缩linux nodejs日志

小樊
35
2026-10-14 09:32:10
栏目: 编程语言

在 Linux 环境下压缩 Node.js 日志,通常可以从日志生成时控制、定期压缩归档、自动化管理三个层面来做。下面按常见场景给你一套实用方案。


一、Node.js 日志本身“少产生、结构化”

1. 使用日志库(推荐)

不要自己 fs.writeFile 写日志,用成熟库:

  • winston
  • pino(性能最好,体积小)
  • bunyan

示例(pino):

const pino = require('pino')
const logger = pino({
  level: 'info'
})
logger.info('server started')

✅ 好处:

  • 支持 JSON
  • 可配合 pino-rolling / rotating-file
  • 日志体积小

二、日志轮转 + 压缩(最重要)

方案 1:logrotate(Linux 原生,最推荐)

1. 安装

一般 Linux 自带:

which logrotate

2. 配置示例

编辑:

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

内容:

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

说明:

  • compress:用 gzip 压缩
  • daily:每天
  • rotate 14:保留 14 天
  • copytruncate:不重启 Node 也能生效

✅ 最稳妥方案,不用改代码


方案 2:Node 内日志轮转(winston)

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({
      filename: '/var/log/node-app/%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true, // 自动压缩
      maxSize: '20m',
      maxFiles: '14d'
    })
  ]
})

✅ 日志自动按天 + gzip


三、手动压缩已有日志

gzip /var/log/node-app/app.log

或批量:

gzip /var/log/node-app/*.log

查看:

ls -lh /var/log/node-app/

四、进一步瘦身建议

1. 控制日志级别

生产环境:

level: 'info' // 不要 debug

2. 不记录大对象

❌ 错误示例:

logger.info({ user, req, res })

✅ 正确:

logger.info({ userId: user.id })

3. 定期清理

find /var/log/node-app -name "*.gz" -mtime +30 -delete

五、推荐组合(生产最佳实践)

✅ Node.js + pino + logrotate 或 ✅ winston-daily-rotate-file(zippedArchive)


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

  • 用的什么日志库
  • 日志路径
  • 是否容器(Docker)

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

0 踩