方法:需要使用到 timeiso8601内嵌变量来获取时间。 time_iso8601 内嵌变量来获取时间。time iso8601内嵌变量来获取时间。time_iso8601格式如下:2018-09-21T16:01:02+02:00。然后使用正则表达式来获取所需时间的数据

注意层次关系,这段脚本一定要加到server配置内部,且if要在access_log前面,否则set的变量将无法引用

按天分割日志

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
}
access_log  /usr/local/openresty/nginx/logs/access/blog_access_$year-$month-$day.log  main;

按小时、分、秒分割

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
{
    set $year $1;
    set $month $2;
    set $day $3;
    set $hour $4;
    set $minutes $5;
    set $seconds $6;
}
access_log  /usr/local/openresty/nginx/logs/access/blog_access_$year-$month-$day-hour-minutes-seconds.log  main;