温馨提示×

linux nodejs日志如何清理

小樊
45
2026-10-05 12:42:14
栏目: 编程语言

在 Linux 上清理 Node.js 日志,常见做法分为手动清理、自动轮转和代码层控制三种。下面按实用程度给你总结。


一、手动清理(临时用)

1. 直接删除日志文件

rm -f /path/to/nodejs/logs/*.log

2. 清空日志但保留文件

> /path/to/nodejs/logs/app.log
# 或
truncate -s 0 /path/to/nodejs/logs/app.log

⚠️ 如果 Node.js 正在写日志,直接 rm 可能导致:

  • 文件删了但磁盘不释放(进程仍占用)
  • 日志继续写到已删除文件

二、推荐方案:日志轮转(最规范)

方案 1:使用 logrotate(系统级,强烈推荐)

示例配置

sudo vim /etc/logrotate.d/node-app
/path/to/nodejs/logs/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

说明:

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

测试:

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

方案 2:Node.js 内部日志库(开发友好)

使用 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',
  zippedArchive: true
});

优点:

  • 自动按天拆分
  • 自动删除旧日志
  • 不依赖系统

三、Docker 场景(常见)

1. 限制 Docker 日志大小

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

2. 清理 Docker 日志

docker system prune

四、PM2 用户专用

如果你用 PM2:

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

五、不推荐的做法

❌ 直接 rm 正在写入的日志
❌ 写无限增长的大文件
❌ 用 console.log 当正式日志


总结建议

场景 推荐方式
生产服务 logrotate
Node 项目 winston + 轮转
Docker 日志驱动限制
PM2 pm2-logrotate

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

  • 日志是怎么产生的(console / winston / pm2)
  • 是否在 Docker
  • Linux 发行版

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

0 踩