温馨提示×

如何清理Nodejs历史日志

小樊
49
2026-07-18 19:58:59
栏目: 编程语言

清理 Node.js 历史日志 通常取决于你日志的存储方式。下面按常见场景给你一个完整、实用的清理方案。


一、确认日志存在哪里(先判断)

常见日志位置:

  1. 控制台日志

    • console.log / console.error
    • 没有文件,只存在于终端(无需清理)
  2. 文件日志

    • 自己写的日志文件(如 logs/app.log
    • 使用日志库(如 winstonpinobunyan
  3. PM2 日志

    • pm2 logs
    • 默认在 ~/.pm2/logs/
  4. Docker 容器日志

    • /var/lib/docker/containers/

二、手动清理日志文件(通用)

1️⃣ 删除历史日志

# 删除 7 天前的日志
find logs/ -name "*.log" -mtime +7 -delete

或指定目录:

rm -f logs/*.log

⚠️ 注意:不要直接 rm -rf logs,避免误删。


2️⃣ 清空日志文件(不删除文件)

适合正在运行的服务:

> logs/app.log

或:

truncate -s 0 logs/app.log

✅ 好处:不会中断 Node.js 的文件句柄


三、使用 PM2 的情况(最常见)

1️⃣ 查看日志路径

pm2 logs
pm2 info <app_id>

2️⃣ PM2 自带清理命令 ✅(推荐)

pm2 flush

只清理某个应用:

pm2 flush <app_name>

3️⃣ 自动清理(日志轮转)

安装 PM2 日志管理模块:

pm2 install pm2-logrotate

常用配置:

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

✅ 表示:

  • 单文件最大 10MB
  • 保留 7 个
  • 自动压缩旧日志

四、Winston / Pino 日志清理

✅ Winston 示例(结合 logrotate)

一般不需要手动清理,建议:

  • 使用 winston-daily-rotate-file
const transport = new DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d', // 保留 14 天
})

五、Docker 环境清理

1️⃣ 限制 Docker 日志大小(推荐)

docker-compose.yml

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

2️⃣ 清理已有 Docker 日志

truncate -s 0 /var/lib/docker/containers/*/*-json.log

⚠️ 需要 root 权限,且容器正在运行


六、推荐的最佳实践 ✅

场景 推荐方案
PM2 pm2 flush + pm2-logrotate
文件日志 find + mtime 或日志库轮转
Docker 日志大小限制
生产环境 自动轮转,不要手动删

七、快速自查清单

# 1. 日志在哪?
ls logs/

# 2. 是否被占用?
lsof | grep .log

# 3. 是否正在写入?
du -h logs/

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

  • ✅ 是否使用 PM2 / Docker
  • ✅ 日志是 console / winston / pino
  • ✅ 服务器是 Linux / Windows

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

0