linux

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

小樊
43
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
}

解释:

手动触发 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'
  }]
};

解释:

启动应用

使用 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
看了该问题的人还看了