温馨提示×

nodejs日志过大怎么清理

小樊
41
2026-09-14 16:50:34
栏目: 编程语言

在 Node.js 项目中,“日志过大”通常分为 运行日志文件过大控制台输出过多 两种情况。下面从 清理方式预防方案 两方面说明。


一、临时清理日志(手动)

1. 删除或清空日志文件

# 删除日志
rm logs/app.log

# 或清空(保留文件)
> logs/app.log

⚠️ 注意:如果 Node 进程正在写日志,直接 rm 可能导致进程继续写已删除文件(磁盘不释放),建议用下面方式。


2. 安全清理(推荐)

# 先清空,不让进程崩
: > logs/app.log

或使用 logrotate(见下文)。


二、Node.js 日志自动清理方案(重点)

✅ 方案 1:使用日志库(最推荐)

使用 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({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d',      // 保留 14 天
  maxSize: '20m'        // 单文件最大 20MB
});

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

✅ 自动:

  • 按天拆分
  • 超期删除
  • 超大切割

✅ 方案 2:PM2 + 日志管理

如果你用 PM2:

pm2 install pm2-logrotate

配置:

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

✅ 自动清理 PM2 日志


✅ 方案 3:Linux logrotate(服务器级)

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

示例:

/var/www/nodeapp/logs/*.log {
  daily
  rotate 7
  compress
  missingok
  notifempty
  copytruncate
}

✅ 系统级、稳定、无需改代码


三、防止日志爆炸(开发建议)

  1. 不要 console.log 所有请求
  2. 使用日志级别:
    logger.info()
    logger.error()
    
  3. 生产环境关闭 debug
  4. 异常统一捕获
  5. 避免循环内打日志

四、快速判断日志是谁写的

lsof | grep deleted
du -sh logs/*

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

  • 用的是 原生 fs / console / winston / pm2
  • 日志是 文件还是 docker / k8s

我可以给你一套最适合你项目的清理方案

0