debian

Debian Node.js日志如何归档

小樊
53
2025-09-16 16:13:33
栏目: 编程语言

在Debian系统中,可通过以下方式归档Node.js日志:

  1. 使用logrotate工具(推荐)

    • 安装:sudo apt-get install logrotate
    • 创建配置文件:sudo nano /etc/logrotate.d/nodejs,添加以下内容:
      /path/to/nodejs/logs/*.log {
          daily
          rotate 7
          compress
          delaycompress
          missingok
          notifempty
          create 640 root adm
          postrotate
              # 可选:重启应用或通知进程重新打开日志
              # systemctl restart your-node-app
          endscript
      }
      
    • 测试并启用:sudo logrotate -f /etc/logrotate.d/nodejs,确认配置正确后,logrotate会通过cron定时任务自动运行。
  2. 使用Node.js日志库内置轮转

    • winston:安装winston-daily-rotate-file,配置示例:
      const winston = require('winston');
      const DailyRotateFile = require('winston-daily-rotate-file');
      const logger = winston.createLogger({
          transports: [
              new DailyRotateFile({
                  filename: 'application-%DATE%.log',
                  datePattern: 'YYYY-MM-DD',
                  zippedArchive: true,
                  maxSize: '100m',
                  maxFiles: '30d'
              })
          ]
      });
      
    • log4js:配置dateFile类型的appender,设置patternnumBackups参数实现轮转。
  3. 使用PM2日志管理

    • 安装PM2:sudo npm install pm2 -g
    • 启用日志轮转:pm2 install pm2-logrotate,配置参数:
      pm2 set pm2-logrotate:max_size 100M  # 单个文件最大100MB
      pm2 set pm2-logrotate:retain 30      # 保留30个文件
      pm2 set pm2-logrotate:compress true  # 压缩旧日志
      
  4. 手动脚本归档

    • 编写shell脚本(如backup_logs.sh),定期压缩备份日志文件并清理旧文件,通过cron定时执行:
      #!/bin/bash
      LOG_DIR="/path/to/logs"
      BACKUP_DIR="/path/to/backup"
      DATE=$(date +%Y%m%d)
      tar -czf "$BACKUP_DIR/logs_$DATE.tar.gz" -C "$LOG_DIR" ./*.log
      find "$LOG_DIR" -name "*.log" -mtime +30 -exec rm {} \;
      
    • 添加cron任务:crontab -e,添加0 2 * * * /path/to/backup_logs.sh(每天凌晨2点执行)。

选择建议:优先使用logrotate(系统级工具,无需修改应用代码)或winston/log4js(应用级控制,灵活性高),根据实际需求选择轮转周期、压缩方式和保留策略。

0
看了该问题的人还看了