方法一、nginx本身并未带有日志分割功能,故而我们需要写执行脚本去分割日志

cd /usr/local/nginx
touch cut_access_log.sh
vi cut_access_log.sh

# /bin/bash
# 日志保存位置
base_path='/home/wwwlogs'
# 获取当前年信息和月信息
log_path=$(date -d yesterday +"%Y%m")
# 获取昨天的日信息
day=$(date -d yesterday +"%d")
# 按年月创建文件夹
mkdir -p $base_path/access_log/$log_path
# 备份昨天的日志到当月的文件夹
mv $base_path/access.log $base_path/access_log/$log_path/access_$day.log
# 输出备份日志文件名
# echo $base_path/$log_path/access_$day.log
# 通过Nginx信号量控制重读日志
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
#:wq保存

#为脚本加入执行权限
chmod +x cut_access_log.sh

#将脚本加入定时任务,每日零点执行一次
0 0 * * * /usr/local/nginx/cut_access_log.sh

方法二利用logrotate

touch /etc/logrotate.d/nginx
vi nginx
/data/wwwlogs/*nginx.log {
  daily
  rotate 5
  missingok
  dateext
  compress
  notifempty
  sharedscripts
  postrotate
    [ -e /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
  endscript
}

以上写好后,系统会定时每天调用

debug调试

logrotate -d -f /etc/logrotate.d/nginx

不等待cron,直接运行

logrotate -f /etc/logrotate.d/nginx

参数说明

compress通过gzip 压缩转储以后的日志

nocompress不需要压缩时,用这个参数

copytruncate用于还在打开中的日志文件,把当前日志备份并截断

nocopytruncate备份日志文件但是不截断

create mode owner group转储文件,使用指定的文件模式创建新的日志文件

nocreate不建立新的日志文件

delaycompress一起使用时,转储的日志文件到下一次转储时才压缩

nodelaycompress覆盖 delaycompress 选项,转储同时压缩。

errors address专储时的错误信息发送到指定的Email 地址

ifempty即使是空文件也转储,这个是 logrotate 的缺省选项。

notifempty如果是空文件的话,不转储

mail address把转储的日志文件发送到指定的E-mail 地址

nomail转储时不发送日志文件

olddir directory转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

noolddir转储后的日志文件和当前日志文件放在同一个目录下

prerotate/endscript在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行

postrotate/endscript在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

daily指定转储周期为每天

weekly指定转储周期为每周

monthly指定转储周期为每月

rotate count指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份

tabootext [+] list让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~

size size当日志文件到达指定的大小时才转储,后缀MB.