如何以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)或编写脚本来定期切割日志文件。这样可以保持日志文件的可读性,同时防止过度繁忙。同时,需要注意定期删除旧日志文件,以保持存储空间的可用性。
