linux

Linux中Node.js日志轮转配置

小樊
35
2025-11-15 15:49:35
栏目: 编程语言

在Linux系统中,Node.js应用程序的日志轮转可以通过多种方式实现。以下是一些常见的方法:

1. 使用 logrotate 工具

logrotate 是一个系统工具,用于管理日志文件的轮转和压缩。你可以配置 logrotate 来处理Node.js应用程序的日志文件。

步骤:

  1. 创建一个 logrotate 配置文件: 在 /etc/logrotate.d/ 目录下创建一个新的配置文件,例如 nodejs

    sudo nano /etc/logrotate.d/nodejs
    
  2. 配置 logrotate: 在配置文件中添加以下内容:

    /path/to/your/nodejs/logs/*.log {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 640 root adm
    }
    

    解释:

    • /path/to/your/nodejs/logs/*.log:指定要轮转的日志文件路径。
    • daily:每天轮转一次日志。
    • rotate 7:保留7个轮转的日志文件。
    • compress:压缩旧的日志文件。
    • delaycompress:延迟压缩,直到下一次轮转。
    • missingok:如果日志文件不存在,不会报错。
    • notifempty:如果日志文件为空,不进行轮转。
    • create 640 root adm:创建新的日志文件,权限为640,属主为root,属组为adm。
  3. 测试配置: 你可以手动测试 logrotate 配置是否正确:

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

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

如果你使用 pm2 来管理Node.js应用程序,它内置了日志轮转功能。

步骤:

  1. 安装 pm2(如果尚未安装):

    npm install pm2 -g
    
  2. 启动你的Node.js应用并启用日志轮转

    pm2 start app.js --name my-app --log-date-format "YYYY-MM-DD HH:mm Z"
    pm2 set pm2-logrotate:max_size 10M
    pm2 set pm2-logrotate:retain 7
    

    解释:

    • --log-date-format "YYYY-MM-DD HH:mm Z":设置日志日期格式。
    • pm2-logrotate:max_size 10M:设置单个日志文件的最大大小为10MB。
    • pm2-logrotate:retain 7:保留7个轮转的日志文件。

3. 使用自定义脚本

你也可以编写自定义脚本来实现日志轮转。例如,使用 cron 定时任务来压缩和移动日志文件。

步骤:

  1. 创建一个日志轮转脚本

    sudo nano /usr/local/bin/logrotate-nodejs.sh
    

    添加以下内容:

    #!/bin/bash
    
    LOG_DIR="/path/to/your/nodejs/logs"
    LOG_FILES=$(ls $LOG_DIR/*.log)
    
    for LOG_FILE in $LOG_FILES; do
        gzip $LOG_FILE
        mv ${LOG_FILE}.gz ${LOG_FILE}_$(date +%Y%m%d%H%M%S).gz
    done
    
  2. 赋予脚本执行权限

    sudo chmod +x /usr/local/bin/logrotate-nodejs.sh
    
  3. 设置 cron 定时任务

    编辑 crontab 文件:

    crontab -e
    

    添加以下行以每天凌晨1点执行日志轮转脚本:

    0 1 * * * /usr/local/bin/logrotate-nodejs.sh
    

通过以上方法,你可以有效地管理Node.js应用程序的日志文件,确保日志文件不会无限增长,并且可以方便地进行归档和压缩。

0
看了该问题的人还看了