插件窝 干货文章 nginx的日志怎么切割

nginx的日志怎么切割

logrotate Nginx 日志 文件 951    来源:    2025-04-07

Nginx日志切割方法

Nginx本身不提供日志切割功能,但可以通过以下几种方式实现日志切割:

方法一:使用logrotate(推荐)

  1. 创建logrotate配置文件 /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}
  1. 配置说明:

    • daily:每天轮转
    • rotate 14:保留14个日志文件
    • compress:压缩旧日志
    • delaycompress:延迟压缩前一个日志文件
    • create:创建新日志文件并设置权限
    • postrotate:通知Nginx重新打开日志文件
  2. 测试配置:

logrotate -d /etc/logrotate.d/nginx  # 测试
logrotate -f /etc/logrotate.d/nginx  # 强制执行

方法二:手动脚本+crontab

  1. 创建切割脚本 /usr/local/bin/nginx_logrotate.sh
#!/bin/bash
LOGS_PATH=/var/log/nginx
DATE=`date -d "yesterday" +%Y-%m-%d`
PID=/var/run/nginx.pid

for LOG in `ls $LOGS_PATH/*.log`; do
    mv $LOG $LOGS_PATH/$(basename $LOG .log)-$DATE.log
done

kill -USR1 `cat $PID`  # 通知Nginx重新打开日志文件

# 可选:压缩7天前的日志
find $LOGS_PATH -name "*.log" -mtime +7 -exec gzip {} \;
  1. 设置可执行权限:
chmod +x /usr/local/bin/nginx_logrotate.sh
  1. 添加到crontab每天执行:
0 0 * * * /usr/local/bin/nginx_logrotate.sh

方法三:使用系统自带日志工具

某些Linux发行版(如CentOS/RHEL)已预配置了nginx的logrotate,只需确认:

ls /etc/logrotate.d/nginx

注意事项

  1. 切割后需要通过kill -USR1通知Nginx重新打开日志文件
  2. 确保Nginx进程有权限写入新日志文件
  3. 对于高流量网站,建议考虑按小时切割日志
  4. 可以结合gzip压缩旧日志节省空间

以上方法中,使用logrotate是最标准、最推荐的方式,大多数Linux发行版都默认安装了logrotate工具。