温馨提示×

怎样清理Nodejs日志

小樊
42
2026-08-02 14:16:11
栏目: 编程语言

清理 Node.js 日志的方法取决于日志的存储方式(文件、控制台、数据库等)和使用的日志工具。下面按常见场景给你一个完整、实用的清理方案。


一、最简单:直接删除日志文件(适用于文件日志)

1️⃣ 手动删除

rm logs/*.log
rm -f logs/app-*.log

⚠️ 注意:如果 Node.js 进程正在写入该文件,直接删除可能不会释放磁盘空间,需要重启服务或重新打开文件句柄。


2️⃣ 安全清理(推荐 ✅)

truncate -s 0 logs/app.log

或:

: > logs/app.log

✅ 优点:

  • 不删除文件
  • 不中断 Node.js 进程
  • 立即释放磁盘空间

二、使用日志库(最常见 ✅)

情况 1:使用 winston

自动按日期切割(推荐)

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

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

✅ 自动清理,无需手动删除


情况 2:使用 morgan(Express)

Morgan 本身不负责清理日志,需要配合文件轮转:

npm install file-stream-rotator
const rotator = require('file-stream-rotator');

const accessLogStream = rotator.getStream({
  filename: 'logs/access-%DATE%.log',
  frequency: 'daily',
  verbose: false
});

三、Linux 系统级清理(生产环境推荐 ✅)

1️⃣ 使用 logrotate(强烈推荐)

创建配置:

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

示例:

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

✅ 好处:

  • 自动切割
  • 自动压缩
  • 自动删除旧日志
  • 不重启 Node.js

四、Docker 环境清理

1️⃣ 清理 Docker 日志

docker system prune -f

2️⃣ 限制容器日志大小

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  }
}

五、PM2 进程管理(非常常见 ✅)

1️⃣ 清理 PM2 日志

pm2 flush

2️⃣ 限制 PM2 日志大小

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

六、代码层面防止日志爆炸(重要 ⚠️)

✅ 不要在线上打印:

console.log(JSON.stringify(bigObject))

✅ 使用日志级别控制:

logger.info(...)
logger.debug(...) // 生产环境关闭

七、快速选择方案 ✅

场景 推荐方案
本地开发 手动删除 + truncate
生产环境 logrotate
Express morgan + 日志切割
PM2 pm2-logrotate
Docker 限制日志大小
长期运行 winston-daily-rotate-file

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

  • ✅ 你用的是 Express / Koa / NestJS
  • ✅ 日志是 console / winston / morgan / PM2
  • Linux / Docker / Windows

我可以给你一套完全贴合你项目的清理方案

0