温馨提示×

nodejs linux日志怎么清理

小樊
39
2026-09-17 18:08:03
栏目: 编程语言

在 Linux 上清理 Node.js 产生的日志,常见做法有 手动清理、日志轮转、代码层控制、定时任务 几种方式。下面按实用场景给你总结一下。


一、先确认日志在哪里

Node.js 日志常见位置:

  • 项目目录下的 logs/
  • pm2 logs
  • nohup.out
  • 系统 journal(systemd
  • 第三方日志库(winston / pino)
# 查找大日志文件
find / -name "*.log" -size +100M 2>/dev/null

二、手动清理(临时用)

# 删除日志
rm -f /path/to/app.log

# 清空日志(推荐,不中断进程)
> /path/to/app.log

⚠️ 如果进程正在写日志,不要直接 rm,优先清空。


三、使用日志轮转(推荐)

1️⃣ logrotate(Linux 自带)

编辑配置:

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

示例:

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

解释:

  • copytruncate:不重启 Node 也能切日志(很重要)
  • rotate 7:保留 7 天

执行测试:

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

四、PM2 用户(最常见)

1️⃣ PM2 自带日志清理

pm2 flush

2️⃣ 限制日志大小

pm2 start app.js --log-size 10M --log-file /logs/app.log

或修改 ecosystem.config.js

module.exports = {
  apps: [{
    name: "app",
    script: "app.js",
    log_file: "/logs/app.log",
    out_file: "/logs/out.log",
    error_file: "/logs/err.log",
    merge_logs: true,
    max_size: "10M"
  }]
}

五、Node.js 代码层控制(根本方案)

使用 winston + 轮转

npm install 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
});

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

✅ 自动按天切割 + 保留 14 天


六、定时自动清理(兜底)

crontab -e

每天清理 30 天前日志:

0 3 * * * find /var/www/node-app/logs -name "*.log" -mtime +30 -delete

七、systemd 日志(如果你用 systemctl)

# 查看占用
journalctl --disk-usage

# 清理
sudo journalctl --vacuum-time=7d

推荐组合(生产环境)

logrotate + copytruncate
winston / pino 日志库
pm2 flush(开发环境)

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

  • 用的是 pm2 / docker / systemd
  • 日志是 console / 文件 / 第三方库

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

0