温馨提示×

linux nodejs日志清理技巧

小樊
47
2026-09-23 20:47:06
栏目: 编程语言

在 Linux 环境下使用 Node.js 时,日志清理是常见的运维需求。下面从日志产生方式、清理策略、自动化手段、Node.js 自身实践几个角度系统讲一下。


一、常见 Node.js 日志来源

  1. console.log / console.error
  2. 日志库(推荐)
    • winston
    • pino
    • bunyan
  3. PM2 日志
    • pm2 logs
  4. Nginx / 反向代理日志
  5. Docker 容器日志

二、推荐做法:日志按天滚动 + 自动清理

1. 使用 winston + winston-daily-rotate-file

const winston = require('winston');
require('winston-daily-rotate-file');

const transport = new winston.transports.DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d',     // 保留 14 天
  maxSize: '20m',      // 单文件最大 20MB
  zippedArchive: true
});

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

✅ 优点:

  • 不需要手动删日志
  • 自动压缩 & 过期清理

2. 使用 pino + pino-roll

npm i pino pino-roll
const pino = require('pino');
const logger = pino({
  transport: {
    target: 'pino-roll',
    options: {
      file: 'logs/app.log',
      frequency: 'daily',
      maxFiles: 14
    }
  }
});

三、Linux 系统级日志清理(logrotate)

1. 配置 logrotate(强烈推荐)

示例:/etc/logrotate.d/node-app

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

参数说明:

  • daily:每天切
  • rotate 14:保留 14 份
  • compress:压缩旧日志
  • copytruncate:不重启 Node 也能生效

✅ 适合 PM2 / 原生 Node 进程


四、手动 / 脚本清理方式

1. 删除 N 天前的日志

find /var/www/app/logs -name "*.log" -mtime +14 -delete

2. 加入 crontab

crontab -e
0 3 * * * find /var/www/app/logs -name "*.log" -mtime +14 -delete

五、PM2 日志清理

1. 限制 PM2 日志大小

pm2 start app.js --log-date-format "YYYY-MM-DD HH:mm:ss"
pm2 set pm2:log:max-size 10M
pm2 set pm2:log:rotate-interval 1d

2. 手动清理

pm2 flush

六、Docker 环境日志清理

docker-compose 限制日志

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "5"

七、最佳实践总结 ✅

  • ✅ 不要用 console.log 直接写文件
  • ✅ 日志按天切割
  • ✅ 保留 7–30 天
  • ✅ 使用 logrotate 或日志库自带清理
  • ✅ 生产环境务必压缩旧日志

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

  • 用的是 PM2 / Docker / 裸 Node
  • 日志是 文件 / 标准输出
  • 是否有 winston / pino

我可以直接给你一套可复制的配置方案。

0 踩