欢迎访问宙启技术站
智能推送

如何以Nginx脚本方式切割日志

发布时间:2023-05-14 14:13:37

1. 首先,需要在Nginx配置文件中指定日志格式和日志文件位置,例如:

log_format custom '$remote_addr - $remote_user [$time_local] '
                 '"$request" $status $body_bytes_sent '
                 '"$http_referer" "$http_user_agent"';

access_log /var/log/nginx/access.log custom;

这会告诉Nginx使用“custom”格式记录访问日志,并将其写入“/var/log/nginx/access.log”文件中。

2. 然后,可以使用脚本或工具来定期切割和归档日志文件。一个常见的工具是“logrotate”,它可以在Linux系统上自动切割日志文件,并可以根据配置文件进行归档和删除。例如,以下配置文件将在每天切割日志文件,并在30天后删除旧日志文件:

/var/log/nginx/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0640 nginx adm
    sharedscripts
    postrotate
        test ! -f /run/nginx.pid || kill -USR1 cat /run/nginx.pid
    endscript
}

这将在每天的午夜切割日志文件,并将前30天的日志归档为可压缩的文件。然后,它将使用“kill -USR1”命令通知Nginx重新打开日志文件,以便能够继续写入新的日志。

3. 如果需要更细粒度的控制,也可以编写自己的脚本来定期切割日志文件。一个简单的脚本可能如下所示:

#!/bin/bash

LOG_DIR=/var/log/nginx
LOG_FILE=$LOG_DIR/access.log
BACKUP_DIR=$LOG_DIR/archive
DATE=$(date "+%Y%m%d")

if [ ! -d $BACKUP_DIR ]; then
    mkdir $BACKUP_DIR
fi

if [ -f $LOG_FILE ]; then
    mv $LOG_FILE $BACKUP_DIR/access.log.$DATE
fi

kill -USR1 $(cat /run/nginx.pid)

此脚本会将Nginx的访问日志文件从“access.log”重命名为类似“access.log.20210101”的文件,并使用“kill -USR1”命令通知Nginx重新打开日志文件。您可以将此脚本添加到cron任务中,以便每天定期切割日志文件。

总结:

Nginx脚本方式切割日志需要在Nginx配置文件中指定日志格式和位置,然后使用工具(如logrotate)或编写脚本来定期切割日志文件。这样可以保持日志文件的可读性,同时防止过度繁忙。同时,需要注意定期删除旧日志文件,以保持存储空间的可用性。