插件窝 干货文章 如何清理Node.js日志文件

如何清理Node.js日志文件

日志 文件 清理 log 900    来源:    2025-05-06

清理Node.js日志文件是维护服务器或应用健康的重要操作。以下是详细的解决方案,涵盖不同场景和工具:


一、手动清理方案

1. 直接删除日志文件

# 删除单个日志文件
rm /path/to/your/app.log

# 删除目录下所有.log文件
rm /var/log/nodejs/*.log

2. 清空日志文件(保留文件描述符)

# 清空文件内容(适用于仍在写入的日志)
> /path/to/your/app.log

二、自动化清理方案

1. 使用 logrotate(Linux系统推荐)

创建配置文件 /etc/logrotate.d/nodejs

/var/log/nodejs/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 root root
    sharedscripts
    postrotate
        systemctl restart your-node-service.service >/dev/null 2>&1 || true
    endscript
}
  • 关键参数说明
    • daily/weekly/monthly:轮转频率
    • rotate 7:保留7份历史日志
    • compress:启用gzip压缩旧日志
    • create:轮转后重建日志文件

2. 使用Node.js脚本自动清理

const fs = require('fs');
const path = '/var/log/nodejs';

// 删除7天前的日志
fs.readdir(path, (err, files) => {
  files.forEach(file => {
    if (file.endsWith('.log')) {
      const filePath = `${path}/${file}`;
      const stats = fs.statSync(filePath);
      const ageInDays = (Date.now() - stats.mtime) / (1000 * 3600 * 24);

      if (ageInDays > 7) {
        fs.unlinkSync(filePath);
        console.log(`Deleted: ${filePath}`);
      }
    }
  });
});

定时执行:通过cron设置每天运行:

0 0 * * * /usr/bin/node /path/to/cleanup-script.js

三、日志管理工具推荐

  1. Winston + DailyRotateFile

    const winston = require('winston');
    
    const logger = winston.createLogger({
     transports: [
       new winston.transports.DailyRotateFile({
         filename: 'app-%DATE%.log',
         dirname: '/var/log/nodejs',
         maxSize: '20m',
         maxFiles: '14d'
       })
     ]
    });
    
  2. PM2日志管理

    # 清空所有PM2日志
    pm2 flush
    
    # 配置PM2日志轮转
    pm2 install pm2-logrotate
    pm2 set pm2-logrotate:max_size 100M
    pm2 set pm2-logrotate:retain 30
    

四、容器化环境清理(Docker)

# 清理容器日志(需重启容器)
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"

# 限制日志大小(docker-compose示例)
services:
  node-app:
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "3"

五、注意事项

  1. 权限问题:确保执行用户对日志文件有读写权限。
  2. 服务重启:某些应用可能需要重启才能释放文件句柄。
  3. 日志备份:重要日志建议先备份再清理。
  4. 空间监控:可设置磁盘空间报警(如df -h + cron)。

根据您的具体环境(服务器/容器/本地开发)选择最适合的方案。对于生产环境,强烈推荐使用logrotate或日志库的内置轮转功能。