温馨提示×

怎样清理nodejs运行日志

小樊
43
2026-10-11 10:25:01
栏目: 编程语言

清理 Node.js 运行日志的方法,取决于日志是怎么产生的、存在哪里、用什么方式记录的。下面按常见情况给你一套实用方案。


一、先确认日志在哪里

常见日志位置:

  • 控制台输出(stdout / stderr)
  • 项目目录下的日志文件(如 logs/)
  • 使用日志库(winston、pino、log4js)
  • PM2 日志
  • Docker 容器日志
  • 系统日志(Linux:/var/log)

二、常见清理方式

1️⃣ 手动删除日志文件(最简单)

# 查看日志文件
ls -lh logs/

# 删除日志
rm -rf logs/*.log

⚠️ 注意:

  • 不要删正在写入的日志文件(先停服务)
  • 生产环境建议用日志轮转,而不是手动删

2️⃣ 使用日志轮转(推荐 ✅)

Linux:logrotate(最常用)

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

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

说明:

  • daily:每天轮转
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:不中断 Node 进程

3️⃣ Node.js 日志库自动清理

winston + winston-daily-rotate-file

const transport = new DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d' // 保留 14 天
});

pino + pino-roll

pino-roll -d 7 -f logs/app.log

4️⃣ PM2 日志清理

PM2 默认日志在:

~/.pm2/logs/

清理命令:

pm2 flush

或设置日志大小限制(ecosystem.config.js):

module.exports = {
  apps: [{
    name: 'app',
    error_file: 'err.log',
    out_file: 'out.log',
    log_size: '10M',
    merge_logs: true
  }]
}

5️⃣ Docker 日志清理

查看日志大小:

docker inspect --format='{{.LogPath}}' 容器名

限制日志大小(docker-compose.yml):

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

三、不推荐的做法 ❌

  • 直接 rm 正在写入的日志(可能导致磁盘不释放)
  • 用 > log.log 强制清空(某些情况进程仍占用)
  • 长期不清理(磁盘爆满 → 服务挂掉)

四、总结建议 ✅

场景 建议
本地开发 手动删 or pm2 flush
生产服务 logrotate / 日志库轮转
Docker 配置 log driver
高并发 pino + 轮转

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

  • 用的是 PM2 / Docker / 裸跑 Node
  • 日志是 console / winston / pino
  • 系统是 Linux / Windows

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

0 踩