溫馨提示×

Linux環境下Node.js日志切割策略

小樊
57
2025-04-16 11:15:32
欄目: 編程語言

在Linux環境下,對Node.js應用程序的日志進行切割和管理是非常重要的,以確保日志文件不會無限增長,占用過多磁盤空間。以下是一些常見的日志切割策略和工具:

1. 使用 logrotate 工具

logrotate 是一個非常強大的日志管理工具,可以自動切割、壓縮和刪除日志文件。

配置示例

假設你的Node.js應用程序的日志文件路徑為 /var/log/myapp.log,你可以創建一個 logrotate 配置文件 /etc/logrotate.d/myapp,內容如下:

/var/log/myapp.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
}

解釋:

  • daily: 每天切割一次日志。
  • rotate 7: 保留最近7天的日志文件。
  • compress: 壓縮舊的日志文件。
  • delaycompress: 延遲壓縮,直到下一次切割。
  • missingok: 如果日志文件不存在,不會報錯。
  • notifempty: 如果日志文件為空,不進行切割。
  • create 640 root adm: 創建新的日志文件,權限為640,屬主為root,屬組為adm。

手動觸發 logrotate

你可以手動觸發 logrotate 來測試配置是否正確:

sudo logrotate -f /etc/logrotate.d/myapp

2. 使用 pm2 管理Node.js應用

如果你使用 pm2 來管理Node.js應用,它內置了日志管理功能,包括日志切割。

配置示例

pm2 的配置文件 ecosystem.config.js 中,可以添加日志相關的配置:

module.exports = {
  apps: [{
    name: 'myapp',
    script: 'app.js',
    out_file: '/var/log/myapp.out',
    error_file: '/var/log/myapp.error.log',
    log_date_format: 'YYYY-MM-DD HH:mm:ss',
    max_size: '10M',
    instances: 'max',
    exec_mode: 'cluster'
  }]
};

解釋:

  • out_fileerror_file: 指定標準輸出和錯誤輸出的日志文件路徑。
  • log_date_format: 日志日期格式。
  • max_size: 單個日志文件的最大大小,超過后會自動切割。
  • instances: 實例數量,max 表示根據CPU核心數自動調整。

啟動應用

使用 pm2 啟動應用:

pm2 start ecosystem.config.js

3. 自定義日志切割腳本

如果你需要更復雜的日志切割策略,可以編寫自定義腳本。

示例腳本

以下是一個簡單的日志切割腳本示例:

#!/bin/bash

LOG_FILE="/var/log/myapp.log"
BACKUP_DIR="/var/log/myapp-backup"

# 創建備份目錄
mkdir -p $BACKUP_DIR

# 切割日志文件
cp $LOG_FILE $BACKUP_DIR/myapp-$(date +%Y%m%d%H%M%S).log

# 清空原日志文件
> $LOG_FILE

# 壓縮備份的日志文件
cd $BACKUP_DIR
zip -r myapp-$(date +%Y%m%d%H%M%S).zip myapp-*.log

# 刪除舊的日志文件
find . -type f -name 'myapp-*.log' -mtime +7 -exec rm {} \;

定時任務

將腳本添加到 cron 定時任務中:

crontab -e

添加以下行,每天凌晨2點執行日志切割腳本:

0 2 * * * /path/to/your/logrotate-script.sh

通過以上方法,你可以有效地管理Node.js應用程序的日志文件,確保系統的穩定性和可維護性。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女