温馨提示×

Node.js日志文件Ubuntu如何清理

小樊
55
2025-10-07 10:01:54
栏目: 编程语言

Ubuntu系统清理Node.js日志文件的常用方法

1. 手动删除日志文件(临时清理)

适用于需要立即释放磁盘空间的场景,直接通过终端命令删除指定目录下的日志文件。

  • 导航到日志目录:使用cd命令进入Node.js应用的日志文件夹(如/path/to/your/nodejs/app/logs)。
  • 删除单个日志文件:若日志文件名为app.log,执行rm app.log
  • 删除多个日志文件:使用通配符*删除所有.log文件,如rm *.log
  • 强制删除非空目录:若日志目录非空,可添加-rf参数(谨慎使用,避免误删),如rm -rf /path/to/logs/*

2. 使用logrotate工具(自动轮换与清理)

logrotate是Ubuntu系统自带的日志管理工具,可自动完成日志的轮换、压缩、删除,避免手动操作。

  • 安装logrotate(若未安装):sudo apt-get install logrotate
  • 创建配置文件:在/etc/logrotate.d/目录下新建配置文件(如nodeapp),内容如下(根据实际路径调整):
    /path/to/your/nodejs/app/logs/*.log {
        daily                   # 每天轮换
        rotate 7                # 保留最近7天的日志
        compress                # 压缩旧日志(如app.log.1.gz)
        missingok               # 日志文件不存在时不报错
        notifempty              # 日志为空时不轮换
        create 0640 root adm    # 创建新日志文件并设置权限
    }
    
  • 手动触发轮换:若需立即应用配置,执行sudo logrotate -f /etc/logrotate.d/nodeapp

3. 利用journalctl清理系统日志(针对systemd服务)

若Node.js应用通过systemd运行(如使用pm2systemctl启动),其日志会存储在系统日志中,可通过journalctl命令清理。

  • 删除指定时间前的日志:如删除3天前的日志,执行sudo journalctl --vacuum-time 3d
  • 限制日志文件大小:如将日志限制在500MB以内,执行sudo journalctl --vacuum-size 500M

4. 在Node.js应用中实现自动日志轮换

通过第三方日志库(如winston-daily-rotate-file)在应用层实现日志的自动轮换,无需依赖系统工具。

  • 安装库npm install winston-daily-rotate-file
  • 配置日志轮换:在应用代码中添加以下配置(示例):
    const winston = require('winston');
    const DailyRotateFile = require('winston-daily-rotate-file');
    
    const logger = winston.createLogger({
        level: 'info',
        format: winston.format.json(),
        transports: [
            new DailyRotateFile({
                filename: '/path/to/your/nodejs/app/logs/app-%DATE%.log', // 日志文件名(含日期)
                datePattern: 'YYYY-MM-DD',                                // 日期格式
                zippedArchive: true,                                      // 压缩旧日志
                maxSize: '20m',                                           // 单个日志文件最大20MB
                maxFiles: '14d'                                           // 保留最近14天的日志
            })
        ]
    });
    
    logger.info('This is a log message.'); // 记录日志
    
    此配置会每天生成新的日志文件,保留14天,并自动压缩旧日志。

5. 编写Shell脚本定期清理(自定义自动化)

若需更灵活的清理规则(如按文件大小、自定义保留天数),可编写Shell脚本并通过cron定时运行。

  • 创建脚本文件:如cleanup-nodejs-logs.sh,内容如下(替换为实际路径和保留天数):
    #!/bin/bash
    LOG_DIR="/path/to/your/nodejs/app/logs"
    DAYS_TO_KEEP=7
    
    # 查找并删除超过指定天数的.log文件
    find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
    echo "Deleted logs older than $DAYS_TO_KEEP days in $LOG_DIR"
    
  • 赋予执行权限chmod +x cleanup-nodejs-logs.sh
  • 添加定时任务:通过crontab -e添加以下行(如每天凌晨0点运行):
    0 0 * * * /path/to/cleanup-nodejs-logs.sh
    
    此脚本会每天自动清理超过7天的日志文件。

注意事项

  • 备份重要日志:清理前确认日志中无关键信息,避免误删。
  • 测试配置:使用logrotate -d /etc/logrotate.d/nodeapp(dry run)测试配置是否正确。
  • 监控磁盘空间:定期通过df -h检查磁盘使用情况,确保存储充足。

0